List of usage examples for com.google.common.collect ImmutableSet contains
boolean contains(Object o);
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; }