use of com.google.devtools.build.lib.analysis.TransitiveInfoCollection in project bazel by bazelbuild.
the class PyCommon method checkForSharedLibraries.
/**
* Returns true if this target has an .so file in its transitive dependency closure.
*/
public static boolean checkForSharedLibraries(Iterable<TransitiveInfoCollection> deps) throws EvalException {
for (TransitiveInfoCollection dep : deps) {
SkylarkProviders providers = dep.getProvider(SkylarkProviders.class);
SkylarkClassObject provider = null;
if (providers != null) {
provider = providers.getValue(PYTHON_SKYLARK_PROVIDER_NAME, SkylarkClassObject.class);
}
if (provider != null) {
Boolean isUsingSharedLibrary = provider.getValue(IS_USING_SHARED_LIBRARY, Boolean.class);
if (Boolean.TRUE.equals(isUsingSharedLibrary)) {
return true;
}
} else if (FileType.contains(dep.getProvider(FileProvider.class).getFilesToBuild(), CppFileTypes.SHARED_LIBRARY)) {
return true;
}
}
return false;
}
use of com.google.devtools.build.lib.analysis.TransitiveInfoCollection in project bazel by bazelbuild.
the class PyCommon method collectTransitivePythonImports.
private void collectTransitivePythonImports(NestedSetBuilder<PathFragment> builder) {
for (TransitiveInfoCollection dep : getTargetDeps()) {
if (dep.getProvider(PythonImportsProvider.class) != null) {
PythonImportsProvider provider = dep.getProvider(PythonImportsProvider.class);
builder.addTransitive(provider.getTransitivePythonImports());
}
}
}
use of com.google.devtools.build.lib.analysis.TransitiveInfoCollection in project bazel by bazelbuild.
the class TestResultAnalyzer method incrementalAnalyze.
/**
* Incrementally updates a TestSummary given an existing summary
* and a new TestResult. Only call on built targets.
*
* @param summaryBuilder Existing unbuilt test summary associated with a target.
* @param result New test result to aggregate into the summary.
* @return The updated TestSummary.
*/
public TestSummary.Builder incrementalAnalyze(TestSummary.Builder summaryBuilder, TestResult result) {
// Cache retrieval should have been performed already.
Preconditions.checkNotNull(result);
Preconditions.checkNotNull(summaryBuilder);
TestSummary existingSummary = Preconditions.checkNotNull(summaryBuilder.peek());
TransitiveInfoCollection target = existingSummary.getTarget();
Preconditions.checkNotNull(target, "The existing TestSummary must be associated with a target");
BlazeTestStatus status = existingSummary.getStatus();
int numCached = existingSummary.numCached();
int numLocalActionCached = existingSummary.numLocalActionCached();
// If a test was neither cached locally nor remotely we say action was taken.
if (!(result.isCached() || result.getData().getRemotelyCached())) {
summaryBuilder.setActionRan(true);
} else {
numCached++;
}
if (result.isCached()) {
numLocalActionCached++;
}
PathFragment coverageData = result.getCoverageData();
if (coverageData != null) {
summaryBuilder.addCoverageFiles(Collections.singletonList(execRoot.getRelative(coverageData)));
}
if (!executionOptions.runsPerTestDetectsFlakes) {
status = aggregateStatus(status, result.getData().getStatus());
} else {
int shardNumber = result.getShardNum();
int runsPerTestForLabel = target.getProvider(TestProvider.class).getTestParams().getRuns();
List<BlazeTestStatus> singleShardStatuses = summaryBuilder.addShardStatus(shardNumber, result.getData().getStatus());
if (singleShardStatuses.size() == runsPerTestForLabel) {
BlazeTestStatus shardStatus = BlazeTestStatus.NO_STATUS;
int passes = 0;
for (BlazeTestStatus runStatusForShard : singleShardStatuses) {
shardStatus = aggregateStatus(shardStatus, runStatusForShard);
if (TestResult.isBlazeTestStatusPassed(runStatusForShard)) {
passes++;
}
}
// If all results pass or fail, aggregate the passing/failing shardStatus.
if (passes == 0 || passes == runsPerTestForLabel) {
status = aggregateStatus(status, shardStatus);
} else {
status = aggregateStatus(status, BlazeTestStatus.FLAKY);
}
}
}
List<Path> passed = new ArrayList<>();
if (result.getData().hasPassedLog()) {
passed.add(result.getTestAction().getTestLog().getPath().getRelative(result.getData().getPassedLog()));
}
List<Path> failed = new ArrayList<>();
for (String path : result.getData().getFailedLogsList()) {
failed.add(result.getTestAction().getTestLog().getPath().getRelative(path));
}
summaryBuilder.addTestTimes(result.getData().getTestTimesList()).addPassedLogs(passed).addFailedLogs(failed).addWarnings(result.getData().getWarningList()).collectFailedTests(result.getData().getTestCase()).setRanRemotely(result.getData().getIsRemoteStrategy());
List<String> warnings = new ArrayList<>();
if (status == BlazeTestStatus.PASSED && shouldEmitTestSizeWarningInSummary(summaryOptions.testVerboseTimeoutWarnings, warnings, result.getData().getTestProcessTimesList(), target)) {
summaryBuilder.setWasUnreportedWrongSize(true);
}
return summaryBuilder.setStatus(status).setNumCached(numCached).setNumLocalActionCached(numLocalActionCached).addWarnings(warnings);
}
use of com.google.devtools.build.lib.analysis.TransitiveInfoCollection in project bazel by bazelbuild.
the class SkylarkRuleContextTest method shouldGetPrerequisite.
@Test
public void shouldGetPrerequisite() throws Exception {
SkylarkRuleContext ruleContext = createRuleContext("//foo:asr");
Object result = evalRuleContextCode(ruleContext, "ruleContext.attr.srcjar");
TransitiveInfoCollection tic = (TransitiveInfoCollection) result;
assertThat(tic).isInstanceOf(FileConfiguredTarget.class);
assertEquals("asr-src.jar", tic.getLabel().getName());
}
Aggregations