Example usage for com.google.common.collect ImmutableSet contains

List of usage examples for com.google.common.collect ImmutableSet contains

Introduction

In this page you can find the example usage for com.google.common.collect ImmutableSet contains.

Prototype

boolean contains(Object o);

Source Link

Document

Returns true if this set contains the specified element.

Usage

From source file:com.facebook.buck.apple.xcode.ProjectGenerator.java

private Iterable<BuildRule> getRecursiveRuleDependenciesOfType(final BuildRule rule, BuildRuleType... types) {
    final ImmutableSet<BuildRuleType> requestedTypes = ImmutableSet.copyOf(types);
    final ImmutableList.Builder<BuildRule> filteredRules = ImmutableList.builder();
    AbstractAcyclicDepthFirstPostOrderTraversal<BuildRule> traversal = new AbstractAcyclicDepthFirstPostOrderTraversal<BuildRule>() {
        @Override//w  w w  .  ja  va 2 s .  c om
        protected Iterator<BuildRule> findChildren(BuildRule node) throws IOException {
            return node.getDeps().iterator();
        }

        @Override
        protected void onNodeExplored(BuildRule node) {
            if (node != rule && requestedTypes.contains(node.getType())) {
                filteredRules.add(node);
            }
        }

        @Override
        protected void onTraversalComplete(Iterable<BuildRule> nodesInExplorationOrder) {
        }
    };
    try {
        traversal.traverse(ImmutableList.of(rule));
    } catch (AbstractAcyclicDepthFirstPostOrderTraversal.CycleException | IOException e) {
        // actual load failures and cycle exceptions should have been caught at an earlier stage
        throw new RuntimeException(e);
    }
    return filteredRules.build();
}

From source file:com.facebook.buck.apple.project_generator.WorkspaceAndProjectGenerator.java

private GenerationResult generateProjectForDirectory(Map<Path, ProjectGenerator> projectGenerators,
        Optional<BuildTarget> targetToBuildWithBuck, Cell projectCell, Path projectDirectory,
        final ImmutableSet<BuildTarget> rules) throws IOException {
    boolean shouldGenerateProjects = false;
    ProjectGenerator generator;/*from w w w.  ja v  a  2  s. com*/
    synchronized (projectGenerators) {
        generator = projectGenerators.get(projectDirectory);
        if (generator != null) {
            LOG.debug("Already generated project for target %s, skipping", projectDirectory);
        } else {
            LOG.debug("Generating project for directory %s with targets %s", projectDirectory, rules);
            String projectName;
            if (projectDirectory.getFileName().toString().equals("")) {
                // If we're generating a project in the root directory, use a generic name.
                projectName = "Project";
            } else {
                // Otherwise, name the project the same thing as the directory we're in.
                projectName = projectDirectory.getFileName().toString();
            }
            generator = new ProjectGenerator(projectGraph, dependenciesCache, rules, projectCell,
                    projectDirectory, projectName, buildFileName, projectGeneratorOptions,
                    Optionals.bind(targetToBuildWithBuck,
                            input -> rules.contains(input) ? Optional.of(input) : Optional.empty()),
                    buildWithBuckFlags, focusModules, executableFinder, environment, cxxPlatforms,
                    defaultCxxPlatform, sourcePathResolverForNode, buckEventBus, halideBuckConfig,
                    cxxBuckConfig, appleConfig, swiftBuckConfig);
            projectGenerators.put(projectDirectory, generator);
            shouldGenerateProjects = true;
        }
    }

    ImmutableSet<BuildTarget> requiredBuildTargets = ImmutableSet.of();
    ImmutableMultimap<BuildTarget, PBXTarget> buildTargetToGeneratedTargetMap = ImmutableMultimap.of();
    if (shouldGenerateProjects) {
        generator.createXcodeProjects();
    }
    if (generator.isProjectGenerated()) {
        requiredBuildTargets = generator.getRequiredBuildTargets();
        buildTargetToGeneratedTargetMap = generator.getBuildTargetToGeneratedTargetMap();
    }

    return GenerationResult.of(generator.getProjectPath(), generator.isProjectGenerated(), requiredBuildTargets,
            buildTargetToGeneratedTargetMap);
}

From source file:com.facebook.buck.features.haskell.HaskellLibraryDescription.java

private HaskellHaddockLibRule requireHaddockLibrary(BuildTarget baseTarget, ProjectFilesystem projectFilesystem,
        BuildRuleParams baseParams, ActionGraphBuilder graphBuilder, SourcePathResolver pathResolver,
        SourcePathRuleFinder ruleFinder, HaskellPlatform platform, HaskellLibraryDescriptionArg args) {
    CxxPlatform cxxPlatform = platform.getCxxPlatform();
    CxxDeps allDeps = CxxDeps.builder().addDeps(args.getDeps()).addPlatformDeps(args.getPlatformDeps()).build();
    ImmutableSet<BuildRule> deps = allDeps.get(graphBuilder, cxxPlatform);

    // Collect all Haskell deps
    ImmutableSet.Builder<SourcePath> haddockInterfaces = ImmutableSet.builder();
    ImmutableSortedMap.Builder<String, HaskellPackage> packagesBuilder = ImmutableSortedMap.naturalOrder();
    ImmutableSortedMap.Builder<String, HaskellPackage> exposedPackagesBuilder = ImmutableSortedMap
            .naturalOrder();//from  w w w. ja v a  2 s . c  o  m

    // Traverse all deps to pull interfaces
    new AbstractBreadthFirstTraversal<BuildRule>(deps) {
        @Override
        public Iterable<BuildRule> visit(BuildRule rule) {
            ImmutableSet.Builder<BuildRule> traverse = ImmutableSet.builder();
            if (rule instanceof HaskellCompileDep) {
                HaskellCompileDep haskellCompileDep = (HaskellCompileDep) rule;

                // Get haddock-interfaces
                HaskellHaddockInput inp = haskellCompileDep.getHaddockInput(platform);
                haddockInterfaces.addAll(inp.getInterfaces());

                HaskellCompileInput compileInput = haskellCompileDep.getCompileInput(platform,
                        Linker.LinkableDepType.STATIC, args.isEnableProfiling());
                boolean firstOrderDep = deps.contains(rule);
                for (HaskellPackage pkg : compileInput.getPackages()) {
                    if (firstOrderDep) {
                        exposedPackagesBuilder.put(pkg.getInfo().getIdentifier(), pkg);
                    } else {
                        packagesBuilder.put(pkg.getInfo().getIdentifier(), pkg);
                    }
                }
                traverse.addAll(haskellCompileDep.getCompileDeps(platform));
            }
            return traverse.build();
        }
    }.start();

    Collection<CxxPreprocessorInput> cxxPreprocessorInputs = CxxPreprocessables
            .getTransitiveCxxPreprocessorInput(cxxPlatform, graphBuilder, deps);
    ExplicitCxxToolFlags.Builder toolFlagsBuilder = CxxToolFlags.explicitBuilder();
    PreprocessorFlags.Builder ppFlagsBuilder = PreprocessorFlags.builder();
    toolFlagsBuilder.setPlatformFlags(
            StringArg.from(CxxSourceTypes.getPlatformPreprocessFlags(cxxPlatform, CxxSource.Type.C)));
    for (CxxPreprocessorInput input : cxxPreprocessorInputs) {
        ppFlagsBuilder.addAllIncludes(input.getIncludes());
        ppFlagsBuilder.addAllFrameworkPaths(input.getFrameworks());
        toolFlagsBuilder.addAllRuleFlags(input.getPreprocessorFlags().get(CxxSource.Type.C));
    }
    ppFlagsBuilder.setOtherFlags(toolFlagsBuilder.build());

    return graphBuilder.addToIndex(HaskellHaddockLibRule
            .from(baseTarget.withAppendedFlavors(Type.HADDOCK.getFlavor(), platform.getFlavor()),
                    projectFilesystem, baseParams, ruleFinder,
                    HaskellSources.from(baseTarget, graphBuilder, pathResolver, ruleFinder, platform, "srcs",
                            args.getSrcs()),
                    platform.getHaddock().resolve(graphBuilder), args.getHaddockFlags(),
                    args.getCompilerFlags(), platform.getLinkerFlags(), haddockInterfaces.build(),
                    packagesBuilder.build(), exposedPackagesBuilder.build(),
                    getPackageInfo(platform, baseTarget), platform, CxxSourceTypes
                            .getPreprocessor(platform.getCxxPlatform(), CxxSource.Type.C).resolve(graphBuilder),
                    ppFlagsBuilder.build()));
}

From source file:com.facebook.buck.features.apple.project.WorkspaceAndProjectGenerator.java

/**
 * Create individual schemes for each project and associated tests. Provided as a workaround for a
 * change in Xcode 10 where Apple started building all scheme targets and tests when clicking on a
 * single item from the test navigator.//from w ww  .  j a va2s  .  c  o  m
 *
 * @param workspaceName
 * @param outputDirectory
 * @param schemeTargets Targets to be considered for scheme. Allows external filtering of targets
 *     included in the project's scheme.
 * @param generatedProjectToPbxTargets
 * @param targetToProjectPathMap
 * @param buildForTestTargets
 * @param ungroupedTestTargets
 * @throws IOException
 */
private void writeWorkspaceSchemesForProjects(String workspaceName, Path outputDirectory,
        ImmutableSet<PBXTarget> schemeTargets,
        ImmutableSetMultimap<PBXProject, PBXTarget> generatedProjectToPbxTargets,
        ImmutableMap<PBXTarget, Path> targetToProjectPathMap,
        ImmutableSetMultimap<String, PBXTarget> buildForTestTargets,
        ImmutableSetMultimap<String, PBXTarget> ungroupedTestTargets) throws IOException {

    for (PBXProject project : generatedProjectToPbxTargets.keys()) {
        String schemeName = project.getName();

        ImmutableSet<PBXTarget> projectTargets = generatedProjectToPbxTargets.get(project);

        ImmutableSet<PBXTarget> orderedBuildTestTargets = projectTargets.stream()
                .filter(pbxTarget -> buildForTestTargets.values().contains(pbxTarget))
                .collect(ImmutableSet.toImmutableSet());

        ImmutableSet<PBXTarget> orderedRunTestTargets = projectTargets.stream()
                .filter(pbxTarget -> ungroupedTestTargets.values().contains(pbxTarget))
                .collect(ImmutableSet.toImmutableSet());

        // add all non-test targets as full build targets
        ImmutableSet<PBXTarget> orderedBuildTargets = projectTargets.stream()
                .filter(pbxTarget -> schemeTargets.contains(pbxTarget))
                .filter(pbxTarget -> !orderedBuildTestTargets.contains(pbxTarget))
                .collect(ImmutableSet.toImmutableSet());

        SchemeGenerator schemeGenerator = buildSchemeGenerator(targetToProjectPathMap, workspaceName,
                outputDirectory, schemeName, Optional.empty(), Optional.empty(), orderedBuildTargets,
                orderedBuildTestTargets, orderedRunTestTargets, Optional.empty(), Optional.empty());

        schemeGenerator.writeScheme();
        schemeGenerators.put(schemeName, schemeGenerator);
    }
}

From source file:com.google.auto.value.processor.AutoValueProcessor.java

private ImmutableSet<ExecutableElement> methodsConsumedByExtensions(TypeElement type,
        ImmutableList<AutoValueExtension> applicableExtensions, ExtensionContext context,
        ImmutableSet<ExecutableElement> abstractMethods, ImmutableBiMap<String, ExecutableElement> properties) {
    Set<ExecutableElement> consumed = Sets.newHashSet();
    for (AutoValueExtension extension : applicableExtensions) {
        Set<ExecutableElement> consumedHere = Sets.newHashSet();
        for (String consumedProperty : extension.consumeProperties(context)) {
            ExecutableElement propertyMethod = properties.get(consumedProperty);
            if (propertyMethod == null) {
                errorReporter.reportError(
                        "Extension " + extensionName(extension)
                                + " wants to consume a property that does not exist: " + consumedProperty,
                        type);//  w  ww  .  ja  v a2s.c  om
            } else {
                consumedHere.add(propertyMethod);
            }
        }
        for (ExecutableElement consumedMethod : extension.consumeMethods(context)) {
            if (!abstractMethods.contains(consumedMethod)) {
                errorReporter.reportError("Extension " + extensionName(extension)
                        + " wants to consume a method that is not one of the abstract methods in this"
                        + " class: " + consumedMethod, type);
            } else {
                consumedHere.add(consumedMethod);
            }
        }
        for (ExecutableElement repeat : Sets.intersection(consumed, consumedHere)) {
            errorReporter.reportError("Extension " + extensionName(extension)
                    + " wants to consume a method that was already" + " consumed by another extension", repeat);
        }
        consumed.addAll(consumedHere);
    }
    return ImmutableSet.copyOf(consumed);
}

From source file:dagger.internal.codegen.ComponentValidator.java

private void validateSubcomponentMethod(final ValidationReport.Builder<TypeElement> builder,
        final ComponentDescriptor.Kind subcomponentKind, ExecutableElement method,
        List<? extends VariableElement> parameters, List<? extends TypeMirror> parameterTypes,
        TypeMirror returnType, Optional<AnnotationMirror> subcomponentAnnotation) {
    ImmutableSet<TypeElement> moduleTypes = MoreTypes
            .asTypeElements(getComponentModules(subcomponentAnnotation.get()));

    // TODO(gak): This logic maybe/probably shouldn't live here as it requires us to traverse
    // subcomponents and their modules separately from how it is done in ComponentDescriptor and
    // ModuleDescriptor
    @SuppressWarnings("deprecation")
    ImmutableSet<TypeElement> transitiveModules = getTransitiveModules(types, elements, moduleTypes);

    Set<TypeElement> variableTypes = Sets.newHashSet();

    for (int i = 0; i < parameterTypes.size(); i++) {
        VariableElement parameter = parameters.get(i);
        TypeMirror parameterType = parameterTypes.get(i);
        Optional<TypeElement> moduleType = parameterType
                .accept(new SimpleTypeVisitor6<Optional<TypeElement>, Void>() {
                    @Override/*from w ww  . ja va2  s  .c o  m*/
                    protected Optional<TypeElement> defaultAction(TypeMirror e, Void p) {
                        return Optional.empty();
                    }

                    @Override
                    public Optional<TypeElement> visitDeclared(DeclaredType t, Void p) {
                        for (ModuleDescriptor.Kind moduleKind : subcomponentKind.moduleKinds()) {
                            if (MoreElements.isAnnotationPresent(t.asElement(),
                                    moduleKind.moduleAnnotation())) {
                                return Optional.of(MoreTypes.asTypeElement(t));
                            }
                        }
                        return Optional.empty();
                    }
                }, null);
        if (moduleType.isPresent()) {
            if (variableTypes.contains(moduleType.get())) {
                builder.addError(
                        String.format(
                                "A module may only occur once an an argument in a Subcomponent factory "
                                        + "method, but %s was already passed.",
                                moduleType.get().getQualifiedName()),
                        parameter);
            }
            if (!transitiveModules.contains(moduleType.get())) {
                builder.addError(String.format(
                        "%s is present as an argument to the %s factory method, but is not one of the"
                                + " modules used to implement the subcomponent.",
                        moduleType.get().getQualifiedName(),
                        MoreTypes.asTypeElement(returnType).getQualifiedName()), method);
            }
            variableTypes.add(moduleType.get());
        } else {
            builder.addError(
                    String.format("Subcomponent factory methods may only accept modules, but %s is not.",
                            parameterType),
                    parameter);
        }
    }
}

From source file:org.sosy_lab.cpachecker.core.algorithm.BMCAlgorithm.java

private ImmutableSet<BooleanFormula> guessLoopHeadInvariants(ReachedSet pReachedSet,
        final Set<CFAEdge> pAssumeEdges, ProverEnvironment pProver, Loop pLoop,
        ImmutableSet<BooleanFormula> pPreviousLoopHeadInvariants) throws CPAException, InterruptedException {

    if (pAssumeEdges.isEmpty()) {
        return ImmutableSet.of();
    }//from  w w w. ja v a  2s  . c  o m

    Iterable<AbstractState> loopHeadStates = AbstractStates.filterLocations(pReachedSet, pLoop.getLoopHeads());

    ImmutableSet.Builder<BooleanFormula> candidateInvariants = new ImmutableSet.Builder<>();

    for (CFAEdge assumeEdge : pAssumeEdges) {
        PathFormula invariantPathFormula = pmgr.makeFormulaForPath(Collections.singletonList(assumeEdge));
        BooleanFormula negatedCandidateInvariant = fmgr.uninstantiate(invariantPathFormula.getFormula());
        BooleanFormula candidateInvariant = bfmgr.not(negatedCandidateInvariant);

        if (pPreviousLoopHeadInvariants == null || pPreviousLoopHeadInvariants.contains(candidateInvariant)) {

            // Is there any loop head state, where the assumption does not hold?
            BooleanFormula invariantInvalidity = bfmgr
                    .not(bfmgr.and(from(assertAt(loopHeadStates, candidateInvariant)).toList()));

            pProver.push(invariantInvalidity);
            if (pProver.isUnsat()) {
                candidateInvariants.add(candidateInvariant);
            } else if (logger.wouldBeLogged(Level.ALL)) {
                logger.log(Level.ALL, candidateInvariant, "is not an invariant:", pProver.getModel());
            }
            pProver.pop();
        }

    }

    return candidateInvariants.build();
}

From source file:dagger2.internal.codegen.ComponentValidator.java

private void validateSubcomponentMethod(final ValidationReport.Builder<TypeElement> builder,
        ExecutableElement method, List<? extends VariableElement> parameters,
        List<? extends TypeMirror> parameterTypes, TypeMirror returnType,
        Optional<AnnotationMirror> subcomponentAnnotation) {
    ImmutableSet<TypeElement> moduleTypes = MoreTypes
            .asTypeElements(getComponentModules(subcomponentAnnotation.get()));

    ImmutableSet<TypeElement> transitiveModules = getTransitiveModules(types, elements, moduleTypes);

    ImmutableSet<TypeElement> requiredModules = FluentIterable.from(transitiveModules)
            .filter(new Predicate<TypeElement>() {
                @Override/*from   w ww.ja  v a2s.  c om*/
                public boolean apply(TypeElement input) {
                    return !componentCanMakeNewInstances(input);
                }
            }).toSet();

    Set<TypeElement> variableTypes = Sets.newHashSet();

    for (int i = 0; i < parameterTypes.size(); i++) {
        VariableElement parameter = parameters.get(i);
        TypeMirror parameterType = parameterTypes.get(i);
        Optional<TypeElement> moduleType = parameterType
                .accept(new SimpleTypeVisitor6<Optional<TypeElement>, Void>() {
                    @Override
                    protected Optional<TypeElement> defaultAction(TypeMirror e, Void p) {
                        return Optional.absent();
                    }

                    @Override
                    public Optional<TypeElement> visitDeclared(DeclaredType t, Void p) {
                        return MoreElements.isAnnotationPresent(t.asElement(), Module.class)
                                ? Optional.of(MoreTypes.asTypeElement(t))
                                : Optional.<TypeElement>absent();
                    }
                }, null);
        if (moduleType.isPresent()) {
            if (variableTypes.contains(moduleType.get())) {
                builder.addItem(
                        String.format(
                                "A module may only occur once an an argument in a Subcomponent factory "
                                        + "method, but %s was already passed.",
                                moduleType.get().getQualifiedName()),
                        parameter);
            }
            if (!transitiveModules.contains(moduleType.get())) {
                builder.addItem(String.format(
                        "%s is present as an argument to the %s factory method, but is not one of the"
                                + " modules used to implement the subcomponent.",
                        moduleType.get().getQualifiedName(),
                        MoreTypes.asTypeElement(returnType).getQualifiedName()), method);
            }
            variableTypes.add(moduleType.get());
        } else {
            builder.addItem(
                    String.format("Subcomponent factory methods may only accept modules, but %s is not.",
                            parameterType),
                    parameter);
        }
    }

    SetView<TypeElement> missingModules = Sets.difference(requiredModules, ImmutableSet.copyOf(variableTypes));
    if (!missingModules.isEmpty()) {
        builder.addItem(String.format(
                "%s requires modules which have no visible default constructors. "
                        + "Add the following modules as parameters to this method: %s",
                MoreTypes.asTypeElement(returnType).getQualifiedName(), Joiner.on(", ").join(missingModules)),
                method);
    }
}

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

public Path generateWorkspaceAndDependentProjects(Map<Path, ProjectGenerator> projectGenerators)
        throws IOException {
    LOG.debug("Generating workspace for target %s", workspaceBuildTarget);

    String workspaceName = XcodeWorkspaceConfigDescription.getWorkspaceNameFromArg(workspaceArguments);
    Path outputDirectory;//from  w  ww .  ja  v a 2  s.  c  o m
    if (combinedProject) {
        workspaceName += "-Combined";
        outputDirectory = BuildTargets.getGenPath(workspaceBuildTarget, "%s").getParent()
                .resolve(workspaceName + ".xcodeproj");
    } else {
        outputDirectory = workspaceBuildTarget.getBasePath();
    }

    WorkspaceGenerator workspaceGenerator = new WorkspaceGenerator(projectFilesystem,
            combinedProject ? "project" : workspaceName, outputDirectory);

    ImmutableMap.Builder<String, XcodeWorkspaceConfigDescription.Arg> schemeConfigsBuilder = ImmutableMap
            .builder();
    ImmutableSetMultimap.Builder<String, Optional<TargetNode<?>>> schemeNameToSrcTargetNodeBuilder = ImmutableSetMultimap
            .builder();
    ImmutableSetMultimap.Builder<String, TargetNode<?>> buildForTestNodesBuilder = ImmutableSetMultimap
            .builder();
    ImmutableMultimap.Builder<AppleTestBundleParamsKey, TargetNode<AppleTestDescription.Arg>> groupedTestsBuilder = ImmutableMultimap
            .builder();
    ImmutableSetMultimap.Builder<String, TargetNode<AppleTestDescription.Arg>> ungroupedTestsBuilder = ImmutableSetMultimap
            .builder();

    buildWorkspaceSchemes(getTargetToBuildWithBuck(), projectGraph,
            projectGeneratorOptions.contains(ProjectGenerator.Option.INCLUDE_TESTS),
            projectGeneratorOptions.contains(ProjectGenerator.Option.INCLUDE_DEPENDENCIES_TESTS),
            groupableTests, workspaceName, workspaceArguments, schemeConfigsBuilder,
            schemeNameToSrcTargetNodeBuilder, buildForTestNodesBuilder, groupedTestsBuilder,
            ungroupedTestsBuilder);

    ImmutableMap<String, XcodeWorkspaceConfigDescription.Arg> schemeConfigs = schemeConfigsBuilder.build();
    ImmutableSetMultimap<String, Optional<TargetNode<?>>> schemeNameToSrcTargetNode = schemeNameToSrcTargetNodeBuilder
            .build();
    ImmutableSetMultimap<String, TargetNode<?>> buildForTestNodes = buildForTestNodesBuilder.build();
    ImmutableMultimap<AppleTestBundleParamsKey, TargetNode<AppleTestDescription.Arg>> groupedTests = groupedTestsBuilder
            .build();
    ImmutableSetMultimap<String, TargetNode<AppleTestDescription.Arg>> ungroupedTests = ungroupedTestsBuilder
            .build();
    Iterable<PBXTarget> synthesizedCombinedTestTargets = ImmutableList.of();

    ImmutableSet<BuildTarget> targetsInRequiredProjects = FluentIterable
            .from(Optional.presentInstances(schemeNameToSrcTargetNode.values()))
            .append(buildForTestNodes.values()).transform(HasBuildTarget.TO_TARGET).toSet();
    ImmutableMultimap.Builder<BuildTarget, PBXTarget> buildTargetToPbxTargetMapBuilder = ImmutableMultimap
            .builder();
    ImmutableMap.Builder<PBXTarget, Path> targetToProjectPathMapBuilder = ImmutableMap.builder();
    Optional<BuildTarget> targetToBuildWithBuck = getTargetToBuildWithBuck();

    if (combinedProject) {
        LOG.debug("Generating a combined project");
        ProjectGenerator generator = new ProjectGenerator(projectGraph, targetsInRequiredProjects,
                projectFilesystem, outputDirectory.getParent(), workspaceName, buildFileName,
                projectGeneratorOptions, targetToBuildWithBuck, buildWithBuckFlags, executableFinder,
                environment, cxxPlatforms, defaultCxxPlatform, sourcePathResolverForNode, buckEventBus,
                attemptToDetermineBestCxxPlatform, halideBuckConfig, cxxBuckConfig)
                        .setAdditionalCombinedTestTargets(groupedTests)
                        .setTestsToGenerateAsStaticLibraries(groupableTests);
        combinedProjectGenerator = Optional.of(generator);
        generator.createXcodeProjects();

        workspaceGenerator.addFilePath(generator.getProjectPath(), Optional.<Path>absent());
        requiredBuildTargetsBuilder.addAll(generator.getRequiredBuildTargets());

        buildTargetToPbxTargetMapBuilder.putAll(generator.getBuildTargetToGeneratedTargetMap());
        for (PBXTarget target : generator.getBuildTargetToGeneratedTargetMap().values()) {
            targetToProjectPathMapBuilder.put(target, generator.getProjectPath());
        }
        synthesizedCombinedTestTargets = generator.getBuildableCombinedTestTargets();
        for (PBXTarget target : synthesizedCombinedTestTargets) {
            targetToProjectPathMapBuilder.put(target, generator.getProjectPath());
        }
    } else {
        ImmutableMultimap.Builder<Path, BuildTarget> projectDirectoryToBuildTargetsBuilder = ImmutableMultimap
                .builder();
        for (TargetNode<?> targetNode : projectGraph.getNodes()) {
            BuildTarget buildTarget = targetNode.getBuildTarget();
            projectDirectoryToBuildTargetsBuilder.put(buildTarget.getBasePath(), buildTarget);
        }
        ImmutableMultimap<Path, BuildTarget> projectDirectoryToBuildTargets = projectDirectoryToBuildTargetsBuilder
                .build();
        for (Path projectDirectory : projectDirectoryToBuildTargets.keySet()) {
            final ImmutableSet<BuildTarget> rules = filterRulesForProjectDirectory(projectGraph,
                    ImmutableSet.copyOf(projectDirectoryToBuildTargets.get(projectDirectory)));
            if (Sets.intersection(targetsInRequiredProjects, rules).isEmpty()) {
                continue;
            }

            ProjectGenerator generator = projectGenerators.get(projectDirectory);
            if (generator == null) {
                LOG.debug("Generating project for directory %s with targets %s", projectDirectory, rules);
                String projectName;
                if (projectDirectory.getNameCount() == 0) {
                    // If we're generating a project in the root directory, use a generic name.
                    projectName = "Project";
                } else {
                    // Otherwise, name the project the same thing as the directory we're in.
                    projectName = projectDirectory.getFileName().toString();
                }
                generator = new ProjectGenerator(projectGraph, rules, projectFilesystem, projectDirectory,
                        projectName, buildFileName, projectGeneratorOptions, Optionals.bind(
                                targetToBuildWithBuck, new Function<BuildTarget, Optional<BuildTarget>>() {
                                    @Override
                                    public Optional<BuildTarget> apply(BuildTarget input) {
                                        return rules.contains(input) ? Optional.of(input)
                                                : Optional.<BuildTarget>absent();
                                    }
                                }),
                        buildWithBuckFlags, executableFinder, environment, cxxPlatforms, defaultCxxPlatform,
                        sourcePathResolverForNode, buckEventBus, attemptToDetermineBestCxxPlatform,
                        halideBuckConfig, cxxBuckConfig).setTestsToGenerateAsStaticLibraries(groupableTests);

                generator.createXcodeProjects();
                requiredBuildTargetsBuilder.addAll(generator.getRequiredBuildTargets());
                projectGenerators.put(projectDirectory, generator);
            } else {
                LOG.debug("Already generated project for target %s, skipping", projectDirectory);
            }

            workspaceGenerator.addFilePath(generator.getProjectPath());

            buildTargetToPbxTargetMapBuilder.putAll(generator.getBuildTargetToGeneratedTargetMap());
            for (PBXTarget target : generator.getBuildTargetToGeneratedTargetMap().values()) {
                targetToProjectPathMapBuilder.put(target, generator.getProjectPath());
            }
        }

        if (!groupedTests.isEmpty()) {
            ProjectGenerator combinedTestsProjectGenerator = new ProjectGenerator(projectGraph,
                    ImmutableSortedSet.<BuildTarget>of(), projectFilesystem,
                    BuildTargets.getGenPath(workspaceBuildTarget, "%s-CombinedTestBundles"),
                    "_CombinedTestBundles", buildFileName, projectGeneratorOptions,
                    Optional.<BuildTarget>absent(), buildWithBuckFlags, executableFinder, environment,
                    cxxPlatforms, defaultCxxPlatform, sourcePathResolverForNode, buckEventBus,
                    attemptToDetermineBestCxxPlatform, halideBuckConfig, cxxBuckConfig);
            combinedTestsProjectGenerator.setAdditionalCombinedTestTargets(groupedTests).createXcodeProjects();
            workspaceGenerator.addFilePath(combinedTestsProjectGenerator.getProjectPath());
            requiredBuildTargetsBuilder.addAll(combinedTestsProjectGenerator.getRequiredBuildTargets());
            for (PBXTarget target : combinedTestsProjectGenerator.getBuildTargetToGeneratedTargetMap()
                    .values()) {
                targetToProjectPathMapBuilder.put(target, combinedTestsProjectGenerator.getProjectPath());
            }
            synthesizedCombinedTestTargets = combinedTestsProjectGenerator.getBuildableCombinedTestTargets();
            for (PBXTarget target : synthesizedCombinedTestTargets) {
                targetToProjectPathMapBuilder.put(target, combinedTestsProjectGenerator.getProjectPath());
            }
            this.combinedTestsProjectGenerator = Optional.of(combinedTestsProjectGenerator);
        }
    }

    Path workspacePath = workspaceGenerator.writeWorkspace();

    final Multimap<BuildTarget, PBXTarget> buildTargetToTarget = buildTargetToPbxTargetMapBuilder.build();
    final Function<BuildTarget, PBXTarget> targetNodeToPBXTargetTransformer = new Function<BuildTarget, PBXTarget>() {
        @Override
        public PBXTarget apply(BuildTarget input) {
            ImmutableList<PBXTarget> targets = ImmutableList.copyOf(buildTargetToTarget.get(input));
            if (targets.size() == 1) {
                return targets.get(0);
            }
            // The only reason why a build target would map to more than one project target is if
            // there are two project targets: one is the usual one, the other is a target that just
            // shells out to Buck.
            Preconditions.checkState(targets.size() == 2);
            PBXTarget first = targets.get(0);
            PBXTarget second = targets.get(1);
            Preconditions.checkState(first.getName().endsWith(ProjectGenerator.BUILD_WITH_BUCK_POSTFIX)
                    ^ second.getName().endsWith(ProjectGenerator.BUILD_WITH_BUCK_POSTFIX));
            PBXTarget buildWithBuckTarget;
            PBXTarget buildWithXcodeTarget;
            if (first.getName().endsWith(ProjectGenerator.BUILD_WITH_BUCK_POSTFIX)) {
                buildWithBuckTarget = first;
                buildWithXcodeTarget = second;
            } else {
                buildWithXcodeTarget = first;
                buildWithBuckTarget = second;
            }
            return buildWithBuck ? buildWithBuckTarget : buildWithXcodeTarget;
        }
    };

    writeWorkspaceSchemes(workspaceName, outputDirectory, schemeConfigs, schemeNameToSrcTargetNode,
            buildForTestNodes, ungroupedTests, targetToProjectPathMapBuilder.build(),
            synthesizedCombinedTestTargets, new Function<TargetNode<?>, Collection<PBXTarget>>() {
                @Override
                public Collection<PBXTarget> apply(TargetNode<?> input) {
                    return buildTargetToTarget.get(input.getBuildTarget());
                }
            }, targetNodeToPBXTargetTransformer);

    return workspacePath;
}

From source file:org.sosy_lab.cpachecker.util.predicates.weakening.CEXWeakeningManager.java

private List<BooleanFormula> getSelectorsToAbstract(final ImmutableSet<BooleanFormula> toAbstract,
        final Model m, final Map<BooleanFormula, BooleanFormula> selectionInfo, final BooleanFormula primed,
        final int depth) {
    final List<BooleanFormula> newToAbstract = new ArrayList<>();

    // Perform the required abstraction.
    bfmgr.visitRecursively(primed, new DefaultBooleanFormulaVisitor<TraversalProcess>() {

        @Override//  ww  w  .j a  v  a  2 s  .c  om
        protected TraversalProcess visitDefault() {
            return TraversalProcess.CONTINUE;
        }

        @Override
        public TraversalProcess visitAnd(List<BooleanFormula> operands) {
            // Under negation, AND becomes OR.
            // Abstracting away all children which evaluate to _true_ is sufficient.
            Set<BooleanFormula> filtered = new HashSet<>();
            for (BooleanFormula op : operands) {
                if (shouldAbstract(op)) {
                    filtered.add(op);
                }
            }
            return TraversalProcess.custom(filtered);
        }

        @Override
        public TraversalProcess visitOr(List<BooleanFormula> operands) {
            // Under negation, OR becomes AND.
            // ALL children of this node evaluate to true iff the node
            // evaluates to true.
            // Abstracting away any child is sufficient to break the satisfiability.
            Optional<BooleanFormula> selector = findSelector(operands);

            if (selector.isPresent()) {
                if (shouldAbstract(bfmgr.or(operands))) {
                    handleAnnotatedLiteral(selector.get());
                }
                return TraversalProcess.SKIP;
            } else {

                // N.B.: This branch is *never* hit if we use
                // conjunction-annotation mode.

                // OR- implies a difficult choice, unless a selector is present.
                return selectChildren(operands);
            }
        }

        private void handleAnnotatedLiteral(BooleanFormula selector) {
            // Don't-care or evaluates-to-false.
            if (!toAbstract.contains(selector)) {
                newToAbstract.add(selector);
            }
        }

        private boolean shouldAbstract(BooleanFormula f) {
            Boolean out = m.evaluate(bfmgr.not(f));
            return (out != null && out);
        }

        private Optional<BooleanFormula> findSelector(List<BooleanFormula> orOperands) {
            for (BooleanFormula operand : orOperands) {
                if (selectionInfo.containsKey(operand)) {
                    return Optional.of(operand);
                }
            }
            return Optional.empty();
        }

        private TraversalProcess selectChildren(List<BooleanFormula> operands) {
            switch (removalSelectionStrategy) {
            case ALL:
                return TraversalProcess.CONTINUE;
            case FIRST:
                BooleanFormula selected = operands.iterator().next();
                return TraversalProcess.custom(selected);
            case RANDOM:
                int rand = r.nextInt(operands.size());
                return TraversalProcess.custom(operands.get(rand));
            case LEAST_REMOVALS:
                if (depth >= leastRemovalsDepthLimit) {
                    return TraversalProcess.custom(operands.iterator().next());
                }
                BooleanFormula out = Collections.min(operands,
                        Comparator.comparingInt((f) -> recursivelyCallSelf(f).size()));
                return TraversalProcess.custom(out);
            default:
                throw new UnsupportedOperationException("Unexpected strategy");
            }
        }

        private List<BooleanFormula> recursivelyCallSelf(BooleanFormula f) {

            // Doing recursion while doing recursion :P
            // Use NullLogManager to avoid log pollution.
            return getSelectorsToAbstract(toAbstract, m, selectionInfo, f, depth + 1);
        }

    });

    return newToAbstract;
}