List of usage examples for com.google.common.collect ImmutableSetMultimap builder
public static <K, V> Builder<K, V> builder()
From source file:com.facebook.buck.features.apple.project.WorkspaceAndProjectGenerator.java
private void generateProjects(Map<Path, ProjectGenerator> projectGenerators, ListeningExecutorService listeningExecutorService, String workspaceName, Path outputDirectory, WorkspaceGenerator workspaceGenerator, ImmutableSet<BuildTarget> targetsInRequiredProjects, ImmutableSetMultimap.Builder<PBXProject, PBXTarget> generatedProjectToPbxTargetsBuilder, ImmutableMap.Builder<BuildTarget, PBXTarget> buildTargetToPbxTargetMapBuilder, ImmutableMap.Builder<PBXTarget, Path> targetToProjectPathMapBuilder) throws IOException, InterruptedException { if (combinedProject) { generateCombinedProject(workspaceName, outputDirectory, workspaceGenerator, targetsInRequiredProjects, generatedProjectToPbxTargetsBuilder, buildTargetToPbxTargetMapBuilder, targetToProjectPathMapBuilder); } else {/* w ww. j a va2 s . c om*/ generateProject(projectGenerators, listeningExecutorService, workspaceGenerator, targetsInRequiredProjects, generatedProjectToPbxTargetsBuilder, buildTargetToPbxTargetMapBuilder, targetToProjectPathMapBuilder); } }
From source file:com.google.devtools.build.lib.rules.objc.ProtobufSupport.java
private ImmutableSetMultimap<ImmutableSet<Artifact>, Artifact> getInputsToOutputsMap() { Iterable<ObjcProtoProvider> objcProtoProviders = getObjcProtoProviders(); Iterable<ProtoSourcesProvider> protoProviders = getProtoSourcesProviders(); ImmutableList.Builder<NestedSet<Artifact>> protoSets = new ImmutableList.Builder<NestedSet<Artifact>>(); // Traverse all the dependencies ObjcProtoProviders and ProtoSourcesProviders to aggregate // all the transitive groups of proto. for (ObjcProtoProvider objcProtoProvider : objcProtoProviders) { protoSets.addAll(objcProtoProvider.getProtoGroups()); }/*from w ww. java 2s.c om*/ for (ProtoSourcesProvider protoProvider : protoProviders) { protoSets.add(protoProvider.getTransitiveProtoSources()); } HashMap<Artifact, Set<Artifact>> protoToGroupMap = new HashMap<>(); // For each proto in each proto group, store the smallest group in which it is contained. This // group will be considered the smallest input group with which the proto can be generated. for (NestedSet<Artifact> nestedProtoSet : protoSets.build()) { ImmutableSet<Artifact> protoSet = ImmutableSet.copyOf(nestedProtoSet.toSet()); for (Artifact proto : protoSet) { // If the proto is well known, don't store it as we don't need to generate it; it comes // generated with the runtime library. if (attributes.isProtoWellKnown(proto)) { continue; } if (!protoToGroupMap.containsKey(proto)) { protoToGroupMap.put(proto, protoSet); } else { protoToGroupMap.put(proto, Sets.intersection(protoSet, protoToGroupMap.get(proto))); } } } // Now that we have the smallest proto inputs groups for each proto to be generated, we reverse // that map into a multimap to take advantage of the fact that multiple protos can be generated // with the same inputs, to avoid having multiple generation actions with the same inputs and // different ouputs. This only applies for the generation actions, as the compilation actions // compile one generated file at a time. // It's OK to use ImmutableSet<Artifact> as the key, since Artifact caches it's hashCode, and // ImmutableSet calculates it's hashCode in O(n). ImmutableSetMultimap.Builder<ImmutableSet<Artifact>, Artifact> inputsToOutputsMapBuilder = ImmutableSetMultimap .builder(); for (Artifact proto : protoToGroupMap.keySet()) { inputsToOutputsMapBuilder.put(ImmutableSet.copyOf(protoToGroupMap.get(proto)), proto); } return inputsToOutputsMapBuilder.build(); }
From source file:com.publictransitanalytics.scoregenerator.environment.StoredGrid.java
private static ImmutableSetMultimap<GridPoint, Sector> dispositionSectors( final NavigableSet<GeoLatitude> latitudeGridlines, final ImmutableSetMultimap<GeoLatitude, GridPoint> latitudePointMap, final NavigableSet<GeoLongitude> longitudeGridlines, final ImmutableSetMultimap<GeoLongitude, GridPoint> longitudePointMap, TreeBasedTable<GeoLatitude, GeoLongitude, Sector> sectorTable) throws InterruptedException { final ImmutableSetMultimap.Builder<GridPoint, Sector> pointSectorMapBuilder = ImmutableSetMultimap .builder();/*from w w w. j a v a 2s . com*/ final Iterator<GeoLongitude> longitudeIterator = longitudeGridlines.iterator(); final GeoLongitude firstLongitude = longitudeIterator.next(); GeoLongitude longitude = firstLongitude; TreeMultimap<GeoLatitude, GridPoint> latitudeSortedPoints = getLatitudeSortedPointsForLongitude(longitude, longitudePointMap); while (longitudeIterator.hasNext()) { final GeoLongitude nextLongitude = longitudeIterator.next(); final TreeMultimap<GeoLatitude, GridPoint> nextLatitudeSortedPoints = getLatitudeSortedPointsForLongitude( nextLongitude, longitudePointMap); final Iterator<GeoLatitude> latitudeIterator = latitudeGridlines.iterator(); final GeoLatitude firstLatitude = latitudeIterator.next(); GeoLatitude latitude = firstLatitude; TreeMultimap<GeoLongitude, GridPoint> longitudeSortedPoints = getLongitudeSortedPointsForLatitude( latitude, latitudePointMap); while (latitudeIterator.hasNext()) { final GeoLatitude nextLatitude = latitudeIterator.next(); final TreeMultimap<GeoLongitude, GridPoint> nextLongitudeSortedPoints = getLongitudeSortedPointsForLatitude( nextLatitude, latitudePointMap); final Sector sector = sectorTable.get(latitude, longitude); if (sector != null) { final Set<GridPoint> filteredLatitudePoints = latitudeSortedPoints.asMap() .subMap(latitude, true, nextLatitude, true).values().stream() .flatMap(Collection::stream).collect(Collectors.toSet()); for (final GridPoint point : filteredLatitudePoints) { pointSectorMapBuilder.put(point, sector); } final Set<GridPoint> filteredNextLatitudePoints = nextLatitudeSortedPoints.asMap() .subMap(latitude, true, nextLatitude, true).values().stream() .flatMap(Collection::stream).collect(Collectors.toSet()); for (final GridPoint point : filteredNextLatitudePoints) { pointSectorMapBuilder.put(point, sector); } final Set<GridPoint> filteredLongitudePoints = longitudeSortedPoints.asMap() .subMap(longitude, true, nextLongitude, true).values().stream() .flatMap(Collection::stream).collect(Collectors.toSet()); for (final GridPoint point : filteredLongitudePoints) { pointSectorMapBuilder.put(point, sector); } final Set<GridPoint> filteredNextLongitudePoints = nextLongitudeSortedPoints.asMap() .subMap(longitude, true, nextLongitude, true).values().stream() .flatMap(Collection::stream).collect(Collectors.toSet()); for (final GridPoint point : filteredNextLongitudePoints) { pointSectorMapBuilder.put(point, sector); } } latitude = nextLatitude; longitudeSortedPoints = nextLongitudeSortedPoints; } longitude = nextLongitude; latitudeSortedPoints = nextLatitudeSortedPoints; } return pointSectorMapBuilder.build(); }
From source file:com.facebook.buck.features.apple.project.WorkspaceAndProjectGenerator.java
private void generateProject(Map<Path, ProjectGenerator> projectGenerators, ListeningExecutorService listeningExecutorService, WorkspaceGenerator workspaceGenerator, ImmutableSet<BuildTarget> targetsInRequiredProjects, ImmutableSetMultimap.Builder<PBXProject, PBXTarget> generatedProjectToPbxTargetsBuilder, ImmutableMap.Builder<BuildTarget, PBXTarget> buildTargetToPbxTargetMapBuilder, ImmutableMap.Builder<PBXTarget, Path> targetToProjectPathMapBuilder) throws IOException, InterruptedException { ImmutableMultimap.Builder<Cell, BuildTarget> projectCellToBuildTargetsBuilder = ImmutableMultimap.builder(); for (TargetNode<?> targetNode : projectGraph.getNodes()) { BuildTarget buildTarget = targetNode.getBuildTarget(); projectCellToBuildTargetsBuilder.put(rootCell.getCell(buildTarget), buildTarget); }//from www . j a v a 2 s .c o m ImmutableMultimap<Cell, BuildTarget> projectCellToBuildTargets = projectCellToBuildTargetsBuilder.build(); List<ListenableFuture<GenerationResult>> projectGeneratorFutures = new ArrayList<>(); for (Cell projectCell : projectCellToBuildTargets.keySet()) { ImmutableMultimap.Builder<Path, BuildTarget> projectDirectoryToBuildTargetsBuilder = ImmutableMultimap .builder(); ImmutableSet<BuildTarget> cellRules = ImmutableSet.copyOf(projectCellToBuildTargets.get(projectCell)); for (BuildTarget buildTarget : cellRules) { projectDirectoryToBuildTargetsBuilder.put(buildTarget.getBasePath(), buildTarget); } ImmutableMultimap<Path, BuildTarget> projectDirectoryToBuildTargets = projectDirectoryToBuildTargetsBuilder .build(); Path relativeTargetCell = rootCell.getRoot().relativize(projectCell.getRoot()); for (Path projectDirectory : projectDirectoryToBuildTargets.keySet()) { ImmutableSet<BuildTarget> rules = filterRulesForProjectDirectory(projectGraph, ImmutableSet.copyOf(projectDirectoryToBuildTargets.get(projectDirectory))); if (Sets.intersection(targetsInRequiredProjects, rules).isEmpty()) { continue; } boolean isMainProject = workspaceArguments.getSrcTarget().isPresent() && rules.contains(workspaceArguments.getSrcTarget().get()); projectGeneratorFutures.add(listeningExecutorService.submit(() -> { GenerationResult result = generateProjectForDirectory(projectGenerators, projectCell, projectDirectory, rules, isMainProject, targetsInRequiredProjects); // convert the projectPath to relative to the target cell here result = GenerationResult.of(relativeTargetCell.resolve(result.getProjectPath()), result.isProjectGenerated(), result.getRequiredBuildTargets(), result.getXcconfigPaths(), result.getFilesToCopyInXcode(), result.getBuildTargetToGeneratedTargetMap(), result.getGeneratedProjectToPbxTargets()); return result; })); } } List<GenerationResult> generationResults; try { generationResults = Futures.allAsList(projectGeneratorFutures).get(); } catch (ExecutionException e) { Throwables.throwIfInstanceOf(e.getCause(), IOException.class); Throwables.throwIfUnchecked(e.getCause()); throw new IllegalStateException("Unexpected exception: ", e); } for (GenerationResult result : generationResults) { if (!result.isProjectGenerated()) { continue; } workspaceGenerator.addFilePath(result.getProjectPath()); processGenerationResult(generatedProjectToPbxTargetsBuilder, buildTargetToPbxTargetMapBuilder, targetToProjectPathMapBuilder, result); } }
From source file:com.facebook.buck.apple.WorkspaceAndProjectGenerator.java
private static void buildWorkspaceSchemes(Optional<BuildTarget> mainTarget, TargetGraph projectGraph, boolean includeProjectTests, boolean includeDependenciesTests, ImmutableSet<TargetNode<AppleTestDescription.Arg>> groupableTests, String workspaceName, XcodeWorkspaceConfigDescription.Arg workspaceArguments, ImmutableMap.Builder<String, XcodeWorkspaceConfigDescription.Arg> schemeConfigsBuilder, ImmutableSetMultimap.Builder<String, Optional<TargetNode<?>>> schemeNameToSrcTargetNodeBuilder, ImmutableSetMultimap.Builder<String, TargetNode<?>> buildForTestNodesBuilder, ImmutableMultimap.Builder<AppleTestBundleParamsKey, TargetNode<AppleTestDescription.Arg>> groupedTestsBuilder, ImmutableSetMultimap.Builder<String, TargetNode<AppleTestDescription.Arg>> ungroupedTestsBuilder) { ImmutableSetMultimap.Builder<String, TargetNode<AppleTestDescription.Arg>> extraTestNodesBuilder = ImmutableSetMultimap .builder();/*from ww w. ja va 2s . com*/ addWorkspaceScheme(projectGraph, workspaceName, workspaceArguments, schemeConfigsBuilder, schemeNameToSrcTargetNodeBuilder, extraTestNodesBuilder); addExtraWorkspaceSchemes(projectGraph, workspaceArguments.extraSchemes.get(), schemeConfigsBuilder, schemeNameToSrcTargetNodeBuilder, extraTestNodesBuilder); ImmutableSetMultimap<String, Optional<TargetNode<?>>> schemeNameToSrcTargetNode = schemeNameToSrcTargetNodeBuilder .build(); ImmutableSetMultimap<String, TargetNode<AppleTestDescription.Arg>> extraTestNodes = extraTestNodesBuilder .build(); ImmutableSetMultimap.Builder<String, TargetNode<AppleTestDescription.Arg>> selectedTestsBuilder = ImmutableSetMultimap .builder(); buildWorkspaceSchemeTests(mainTarget, projectGraph, includeProjectTests, includeDependenciesTests, schemeNameToSrcTargetNode, extraTestNodes, selectedTestsBuilder, buildForTestNodesBuilder); ImmutableSetMultimap<String, TargetNode<AppleTestDescription.Arg>> selectedTests = selectedTestsBuilder .build(); groupSchemeTests(groupableTests, selectedTests, groupedTestsBuilder, ungroupedTestsBuilder); }
From source file:org.killbill.billing.plugin.simpletax.SimpleTaxPlugin.java
/** * Groups the {@linkplain CustomField custom fields} on * {@linkplain #INVOICE_ITEM invoice items} by the * {@linkplain Invoice#getId() identifier} of their related * {@linkplain Invoice invoices}./*from w w w . ja v a 2s . co m*/ * * @param account * The account to consider * @param allInvoices * The collection of all invoices for the given account. * @param tenantCtx * The context in which this code is running. * @return A new immutable multi-map containing the custom fields on all * invoice items of the given account, grouped by the identifier of * their relate invoice. Never {@code null}, and guaranteed not * having any {@code null} elements. */ private SetMultimap<UUID, CustomField> taxFieldsOfInvoices(Account account, Set<Invoice> allInvoices, TenantContext tenantCtx) { CustomFieldUserApi customFieldsService = services().getCustomFieldUserApi(); List<CustomField> allCustomFields = customFieldsService.getCustomFieldsForAccountType(account.getId(), INVOICE_ITEM, tenantCtx); if ((allCustomFields == null) || allCustomFields.isEmpty()) { return ImmutableSetMultimap.of(); } Map<UUID, Invoice> invoiceOfItem = newHashMap(); for (Invoice invoice : allInvoices) { for (InvoiceItem item : invoice.getInvoiceItems()) { invoiceOfItem.put(item.getId(), invoice); } } ImmutableSetMultimap.Builder<UUID, CustomField> taxFieldsOfInvoice = ImmutableSetMultimap.builder(); for (CustomField field : allCustomFields) { if (TAX_CODES_FIELD_NAME.equals(field.getFieldName())) { Invoice invoice = invoiceOfItem.get(field.getObjectId()); taxFieldsOfInvoice.put(invoice.getId(), field); } } return taxFieldsOfInvoice.build(); }
From source file:com.facebook.buck.apple.WorkspaceAndProjectGenerator.java
private static void addWorkspaceScheme(TargetGraph projectGraph, String schemeName, XcodeWorkspaceConfigDescription.Arg schemeArguments, ImmutableMap.Builder<String, XcodeWorkspaceConfigDescription.Arg> schemeConfigsBuilder, ImmutableSetMultimap.Builder<String, Optional<TargetNode<?>>> schemeNameToSrcTargetNodeBuilder, ImmutableSetMultimap.Builder<String, TargetNode<AppleTestDescription.Arg>> extraTestNodesBuilder) { LOG.debug("Adding scheme %s", schemeName); schemeConfigsBuilder.put(schemeName, schemeArguments); if (schemeArguments.srcTarget.isPresent()) { schemeNameToSrcTargetNodeBuilder .putAll(schemeName,//ww w .j a va 2 s.c o m Iterables .transform( AppleBuildRules.getSchemeBuildableTargetNodes(projectGraph, projectGraph .get(schemeArguments.srcTarget.get().getBuildTarget())), Optionals.<TargetNode<?>>toOptional())); } else { schemeNameToSrcTargetNodeBuilder.put( XcodeWorkspaceConfigDescription.getWorkspaceNameFromArg(schemeArguments), Optional.<TargetNode<?>>absent()); } for (BuildTarget extraTarget : schemeArguments.extraTargets.get()) { schemeNameToSrcTargetNodeBuilder.putAll(schemeName, Iterables.transform( AppleBuildRules.getSchemeBuildableTargetNodes(projectGraph, Preconditions.checkNotNull(projectGraph.get(extraTarget))), Optionals.<TargetNode<?>>toOptional())); } extraTestNodesBuilder.putAll(schemeName, getExtraTestTargetNodes(projectGraph, schemeArguments.extraTests.get())); }
From source file:com.facebook.buck.java.DefaultJavaLibraryRule.java
/** * Building a java_library() rule entails compiling the .java files specified in the srcs * attribute. They are compiled into a directory under {@link BuckConstant#BIN_DIR}. */// w w w . jav a 2s . c om @Override public final List<Step> getBuildSteps(BuildContext context, BuildableContext buildableContext) throws IOException { ImmutableList.Builder<Step> commands = ImmutableList.builder(); BuildTarget buildTarget = getBuildTarget(); JavacOptions javacOptions = this.javacOptions; // Only override the bootclasspath if this rule is supposed to compile Android code. if (getProperties().is(ANDROID)) { javacOptions = JavacOptions.builder(this.javacOptions) .setBootclasspath(context.getAndroidBootclasspathSupplier().get()).build(); } // If this rule depends on AndroidResourceRules, then we need to generate the R.java files that // this rule needs in order to be able to compile itself. androidResourceDeps = UberRDotJavaUtil.getAndroidResourceDeps(this); boolean dependsOnAndroidResourceRules = !androidResourceDeps.isEmpty(); if (dependsOnAndroidResourceRules) { UberRDotJavaUtil.createDummyRDotJavaFiles(androidResourceDeps, buildTarget, commands); } ImmutableSetMultimap<JavaLibraryRule, String> transitiveClasspathEntries = getTransitiveClasspathEntries(); ImmutableSetMultimap<JavaLibraryRule, String> declaredClasspathEntries = getDeclaredClasspathEntries(); // If this rule depends on AndroidResourceRules, then we need to include the compiled R.java // files on the classpath when compiling this rule. if (dependsOnAndroidResourceRules) { ImmutableSetMultimap.Builder<JavaLibraryRule, String> transitiveClasspathEntriesWithRDotJava = ImmutableSetMultimap .builder(); transitiveClasspathEntriesWithRDotJava.putAll(transitiveClasspathEntries); ImmutableSetMultimap.Builder<JavaLibraryRule, String> declaredClasspathEntriesWithRDotJava = ImmutableSetMultimap .builder(); declaredClasspathEntriesWithRDotJava.putAll(declaredClasspathEntries); ImmutableSet<String> rDotJavaClasspath = ImmutableSet .of(UberRDotJavaUtil.getRDotJavaBinFolder(buildTarget)); transitiveClasspathEntriesWithRDotJava.putAll(this, rDotJavaClasspath); declaredClasspathEntriesWithRDotJava.putAll(this, rDotJavaClasspath); declaredClasspathEntries = declaredClasspathEntriesWithRDotJava.build(); transitiveClasspathEntries = transitiveClasspathEntriesWithRDotJava.build(); } // Javac requires that the root directory for generated sources already exist. String annotationGenFolder = javacOptions.getAnnotationProcessingData().getGeneratedSourceFolderName(); if (annotationGenFolder != null) { MakeCleanDirectoryStep mkdirGeneratedSources = new MakeCleanDirectoryStep(annotationGenFolder); commands.add(mkdirGeneratedSources); } // Always create the output directory, even if there are no .java files to compile because there // might be resources that need to be copied there. String outputDirectory = getClassesDir(getBuildTarget()); commands.add(new MakeCleanDirectoryStep(outputDirectory)); Optional<JavacInMemoryStep.SuggestBuildRules> suggestBuildRule = createSuggestBuildFunction(context, transitiveClasspathEntries, declaredClasspathEntries, JAR_RESOLVER); // This adds the javac command, along with any supporting commands. createCommandsForJavac(outputDirectory, ImmutableSet.copyOf(transitiveClasspathEntries.values()), ImmutableSet.copyOf(declaredClasspathEntries.values()), javacOptions, context.getBuildDependencies(), suggestBuildRule, commands); // If there are resources, then link them to the appropriate place in the classes directory. addResourceCommands(context, commands, outputDirectory, context.getJavaPackageFinder()); if (outputJar.isPresent()) { commands.add(new MakeCleanDirectoryStep(getOutputJarDirPath(getBuildTarget()))); commands.add(new JarDirectoryStep(outputJar.get(), Collections.singleton(outputDirectory), /* mainClass */ null, /* manifestFile */ null)); } Preconditions.checkNotNull(abiKeySupplier, "abiKeySupplier must be set so that getAbiKey() will " + "return a non-null value if this rule builds successfully."); addStepsToRecordAbiToDisk(commands, buildableContext); return commands.build(); }
From source file:com.opengamma.strata.collect.Guavate.java
/** * Collector used at the end of a stream to build an immutable multimap. * <p>/*from w ww . jav a 2 s . c o m*/ * A collector is used to gather data at the end of a stream operation. * This method returns a collector allowing streams to be gathered into * an {@link ImmutableSetMultimap}. * <p> * This returns a multimap by converting each stream element to a key and value. * Stream elements may be converted to the same key, with the values forming a multimap set. * * @param <T> the type of the stream elements * @param <K> the type of the keys in the result multimap * @param <V> the type of the values in the result multimap * @param keyExtractor function to produce keys from stream elements * @param valueExtractor function to produce values from stream elements * @return the immutable multimap collector */ public static <T, K, V> Collector<T, ?, ImmutableSetMultimap<K, V>> toImmutableSetMultimap( Function<? super T, ? extends K> keyExtractor, Function<? super T, ? extends V> valueExtractor) { return Collector.of(ImmutableSetMultimap.Builder<K, V>::new, (builder, val) -> builder.put(keyExtractor.apply(val), valueExtractor.apply(val)), (l, r) -> l.putAll(r.build()), ImmutableSetMultimap.Builder<K, V>::build, Collector.Characteristics.UNORDERED); }
From source file:com.facebook.buck.features.apple.project.WorkspaceAndProjectGenerator.java
private void processGenerationResult( ImmutableSetMultimap.Builder<PBXProject, PBXTarget> generatedProjectToPbxTargetsBuilder, ImmutableMap.Builder<BuildTarget, PBXTarget> buildTargetToPbxTargetMapBuilder, ImmutableMap.Builder<PBXTarget, Path> targetToProjectPathMapBuilder, GenerationResult result) { requiredBuildTargetsBuilder.addAll(result.getRequiredBuildTargets()); ImmutableSortedSet<Path> relativeXcconfigPaths = result.getXcconfigPaths().stream() .map((Path p) -> rootCell.getFilesystem().relativize(p)) .collect(ImmutableSortedSet.toImmutableSortedSet(Ordering.natural())); xcconfigPathsBuilder.addAll(relativeXcconfigPaths); filesToCopyInXcodeBuilder.addAll(result.getFilesToCopyInXcode()); buildTargetToPbxTargetMapBuilder.putAll(result.getBuildTargetToGeneratedTargetMap()); generatedProjectToPbxTargetsBuilder.putAll(result.getGeneratedProjectToPbxTargets()); for (PBXTarget target : result.getBuildTargetToGeneratedTargetMap().values()) { targetToProjectPathMapBuilder.put(target, result.getProjectPath()); }//w w w .j av a 2 s. c o m }