use of com.facebook.buck.model.Flavored in project buck by facebook.
the class AuditFlavorsCommand method printFlavors.
private void printFlavors(ImmutableList<TargetNode<?, ?>> targetNodes, CommandRunnerParams params) {
DirtyPrintStreamDecorator stdout = params.getConsole().getStdOut();
for (TargetNode<?, ?> node : targetNodes) {
Description<?> description = node.getDescription();
stdout.println(node.getBuildTarget().getFullyQualifiedName());
if (description instanceof Flavored) {
Optional<ImmutableSet<FlavorDomain<?>>> flavorDomains = ((Flavored) description).flavorDomains();
if (flavorDomains.isPresent()) {
for (FlavorDomain<?> domain : flavorDomains.get()) {
ImmutableSet<UserFlavor> userFlavors = RichStream.from(domain.getFlavors().stream()).filter(UserFlavor.class).collect(MoreCollectors.toImmutableSet());
if (userFlavors.isEmpty()) {
continue;
}
stdout.printf(" %s\n", domain.getName());
for (UserFlavor flavor : userFlavors) {
String flavorLine = String.format(" %s", flavor.getName());
String flavorDescription = flavor.getDescription();
if (flavorDescription.length() > 0) {
flavorLine += String.format(" -> %s", flavorDescription);
}
flavorLine += "\n";
stdout.printf(flavorLine);
}
}
} else {
stdout.println(" unknown");
}
} else {
stdout.println(" no flavors");
}
}
}
use of com.facebook.buck.model.Flavored in project buck by facebook.
the class DefaultParserTargetNodeFactory method createTargetNode.
@Override
public TargetNode<?, ?> createTargetNode(Cell cell, Path buildFile, BuildTarget target, Map<String, Object> rawNode, Function<PerfEventId, SimplePerfEvent.Scope> perfEventScope) {
BuildRuleType buildRuleType = parseBuildRuleTypeFromRawRule(cell, rawNode);
// Because of the way that the parser works, we know this can never return null.
Description<?> description = cell.getDescription(buildRuleType);
UnflavoredBuildTarget unflavoredBuildTarget = target.withoutCell().getUnflavoredBuildTarget();
if (target.isFlavored()) {
if (description instanceof Flavored) {
if (!((Flavored) description).hasFlavors(ImmutableSet.copyOf(target.getFlavors()))) {
throw UnexpectedFlavorException.createWithSuggestions(cell, target);
}
} else {
LOG.warn("Target %s (type %s) must implement the Flavored interface " + "before we can check if it supports flavors: %s", unflavoredBuildTarget, buildRuleType, target.getFlavors());
throw new HumanReadableException("Target %s (type %s) does not currently support flavors (tried %s)", unflavoredBuildTarget, buildRuleType, target.getFlavors());
}
}
UnflavoredBuildTarget unflavoredBuildTargetFromRawData = RawNodeParsePipeline.parseBuildTargetFromRawRule(cell.getRoot(), rawNode, buildFile);
if (!unflavoredBuildTarget.equals(unflavoredBuildTargetFromRawData)) {
throw new IllegalStateException(String.format("Inconsistent internal state, target from data: %s, expected: %s, raw data: %s", unflavoredBuildTargetFromRawData, unflavoredBuildTarget, Joiner.on(',').withKeyValueSeparator("->").join(rawNode)));
}
Cell targetCell = cell.getCell(target);
Object constructorArg = description.createUnpopulatedConstructorArg();
try {
ImmutableSet.Builder<BuildTarget> declaredDeps = ImmutableSet.builder();
ImmutableSet.Builder<VisibilityPattern> visibilityPatterns = ImmutableSet.builder();
try (SimplePerfEvent.Scope scope = perfEventScope.apply(PerfEventId.of("MarshalledConstructorArg"))) {
marshaller.populate(targetCell.getCellPathResolver(), targetCell.getFilesystem(), target, constructorArg, declaredDeps, visibilityPatterns, rawNode);
}
try (SimplePerfEvent.Scope scope = perfEventScope.apply(PerfEventId.of("CreatedTargetNode"))) {
Hasher hasher = Hashing.sha1().newHasher();
hasher.putString(BuckVersion.getVersion(), UTF_8);
JsonObjectHashing.hashJsonObject(hasher, rawNode);
TargetNode<?, ?> node = targetNodeFactory.createFromObject(hasher.hash(), description, constructorArg, targetCell.getFilesystem(), target, declaredDeps.build(), visibilityPatterns.build(), targetCell.getCellPathResolver());
if (buildFileTrees.isPresent() && cell.isEnforcingBuckPackageBoundaries(target.getBasePath())) {
enforceBuckPackageBoundaries(target, buildFileTrees.get().getUnchecked(targetCell), node.getInputs());
}
nodeListener.onCreate(buildFile, node);
return node;
}
} catch (NoSuchBuildTargetException e) {
throw new HumanReadableException(e);
} catch (ParamInfoException e) {
throw new HumanReadableException(e, "%s: %s", target, e.getMessage());
} catch (IOException e) {
throw new HumanReadableException(e.getMessage(), e);
}
}
use of com.facebook.buck.model.Flavored in project buck by facebook.
the class AuditFlavorsCommand method printJsonFlavors.
private void printJsonFlavors(ImmutableList<TargetNode<?, ?>> targetNodes, CommandRunnerParams params) throws IOException {
DirtyPrintStreamDecorator stdout = params.getConsole().getStdOut();
SortedMap<String, SortedMap<String, SortedMap<String, String>>> targetsJson = new TreeMap<>();
for (TargetNode<?, ?> node : targetNodes) {
Description<?> description = node.getDescription();
SortedMap<String, SortedMap<String, String>> flavorDomainsJson = new TreeMap<>();
if (description instanceof Flavored) {
Optional<ImmutableSet<FlavorDomain<?>>> flavorDomains = ((Flavored) description).flavorDomains();
if (flavorDomains.isPresent()) {
for (FlavorDomain<?> domain : flavorDomains.get()) {
ImmutableSet<UserFlavor> userFlavors = RichStream.from(domain.getFlavors().stream()).filter(UserFlavor.class).collect(MoreCollectors.toImmutableSet());
if (userFlavors.isEmpty()) {
continue;
}
SortedMap<String, String> flavorsJson = userFlavors.stream().collect(MoreCollectors.toImmutableSortedMap(UserFlavor::getName, UserFlavor::getDescription));
flavorDomainsJson.put(domain.getName(), flavorsJson);
}
} else {
flavorDomainsJson.put("unknown", new TreeMap<>());
}
}
String targetName = node.getBuildTarget().getFullyQualifiedName();
targetsJson.put(targetName, flavorDomainsJson);
}
params.getObjectMapper().writeValue(stdout, targetsJson);
}
Aggregations