use of org.gradle.internal.Pair in project gradle by gradle.
the class AttributeMatchingVariantSelector method disambiguateWithSchema.
private List<Pair<ResolvedVariant, MutableConsumerVariantMatchResult.ConsumerVariant>> disambiguateWithSchema(AttributeMatcher matcher, List<Pair<ResolvedVariant, MutableConsumerVariantMatchResult.ConsumerVariant>> candidates, ImmutableAttributes componentRequested, AttributeMatchingExplanationBuilder explanationBuilder) {
List<AttributeContainerInternal> candidateAttributes = candidates.stream().map(pair -> pair.getRight().attributes).collect(Collectors.toList());
List<AttributeContainerInternal> matches = matcher.matches(candidateAttributes, componentRequested, explanationBuilder);
if (matches.size() == 1) {
AttributeContainerInternal singleMatch = matches.get(0);
return candidates.stream().filter(pair -> pair.getRight().attributes.equals(singleMatch)).collect(Collectors.toList());
} else if (matches.size() > 0 && matches.size() < candidates.size()) {
// We know all are compatibles, so this is only possible if some disambiguation happens but not getting us to 1 candidate
return candidates.stream().filter(pair -> matches.contains(pair.getRight().attributes)).collect(Collectors.toList());
}
return candidates;
}
use of org.gradle.internal.Pair in project gradle by gradle.
the class AmbiguousTransformException method format.
private static String format(String producerDisplayName, AttributeContainerInternal requested, List<Pair<ResolvedVariant, ConsumerVariantMatchResult.ConsumerVariant>> candidates) {
TreeFormatter formatter = new TreeFormatter();
formatter.node("Found multiple transforms that can produce a variant of " + producerDisplayName + " with requested attributes");
formatAttributes(formatter, requested);
formatter.node("Found the following transforms");
Map<ResolvedVariant, List<ConsumerVariantMatchResult.ConsumerVariant>> variantToTransforms = candidates.stream().collect(Collectors.toMap(Pair::getLeft, candidate -> Lists.newArrayList(candidate.getRight()), (List<ConsumerVariantMatchResult.ConsumerVariant> orig, List<ConsumerVariantMatchResult.ConsumerVariant> add) -> {
orig.addAll(add);
return orig;
}, LinkedHashMap::new));
formatter.startChildren();
for (Map.Entry<ResolvedVariant, List<ConsumerVariantMatchResult.ConsumerVariant>> entry : variantToTransforms.entrySet()) {
formatter.node("From '" + entry.getKey().asDescribable().getDisplayName() + "'");
formatter.startChildren();
formatter.node("With source attributes");
formatAttributes(formatter, entry.getKey().getAttributes());
formatter.node("Candidate transform(s)");
formatter.startChildren();
for (ConsumerVariantMatchResult.ConsumerVariant transform : entry.getValue()) {
formatter.node("Transform '" + transform.transformation.getDisplayName() + "' producing attributes:");
formatAttributes(formatter, transform.attributes);
}
formatter.endChildren();
formatter.endChildren();
}
formatter.endChildren();
return formatter.toString();
}
Aggregations