Skip to content

Commit

Permalink
[fix] fix transitive target failure check in bloop export (#287)
Browse files Browse the repository at this point in the history
* fix transitive target check in bloop export

* update changelog
  • Loading branch information
steveniemitz committed Aug 16, 2022
1 parent 974d8cb commit 0107ce5
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 8 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@

## [Unreleased]

### Fixes 🛠️

- Fix transitive target failure check in bloop export
| [#287](https://github.com/JetBrains/bazel-bsp/pull/287)

## [2.2.1] - 09.08.2022

### Fixes 🛠️
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.nio.file.Path;
import java.util.HashSet;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.jetbrains.bsp.bazel.server.bep.BepServer;
import org.jetbrains.bsp.bazel.server.bsp.info.BspInfo;
Expand All @@ -33,6 +34,19 @@ class BloopExporter {
private final WorkspaceContextProvider workspaceContextProvider;
private final Path workspaceRoot;

static void validateNoFailedExternalTargets(
Set<BuildTargetIdentifier> projectTargets, Set<BuildTargetIdentifier> failedTargets)
throws BazelExportFailedException {
var failedExternalTargets =
failedTargets.stream()
.filter(Predicate.not(projectTargets::contains))
.collect(Collectors.toSet());

if (!failedExternalTargets.isEmpty()) {
throw new BazelExportFailedException(failedExternalTargets);
}
}

public BloopExporter(
BspInfo bspInfo, Path workspaceRoot, WorkspaceContextProvider workspaceContextProvider) {
this.bspInfo = bspInfo;
Expand All @@ -49,17 +63,12 @@ public void export() throws BazelExportFailedException {
initializeClient(serverContainer, client);

var project = projectProvider.refreshAndGet();
var toFilter =
var projectTargets =
project.getModules().stream()
.map(m -> new BuildTargetIdentifier(m.getLabel().getValue()))
.collect(Collectors.toList());
var failedTargets = client.getFailedTargets();
var failedTransitiveTargets =
failedTargets.stream().filter(toFilter::contains).collect(Collectors.toSet());
.collect(Collectors.toSet());

if (!failedTransitiveTargets.isEmpty()) {
throw new BazelExportFailedException(failedTransitiveTargets);
}
validateNoFailedExternalTargets(projectTargets, client.getFailedTargets());

serverContainer
.getBspClientLogger()
Expand Down
10 changes: 10 additions & 0 deletions server/src/test/java/org/jetbrains/bsp/bazel/server/bloop/BUILD
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
load("//:junit5.bzl", "kt_junit5_test")

kt_junit5_test(
name = "BloopExporterTests",
size = "small",
srcs = ["BloopExporterTest.kt"],
test_package = "org.jetbrains.bsp.bazel.server.bloop",
deps = [
"//server/src/main/java/org/jetbrains/bsp/bazel/server/bloop",
],
)

kt_junit5_test(
name = "BspModuleExporterTest",
size = "small",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.jetbrains.bsp.bazel.server.bloop

import ch.epfl.scala.bsp4j.BuildTargetIdentifier
import org.jetbrains.bsp.bazel.server.bloop.BloopExporter.BazelExportFailedException
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.fail

class BloopExporterTest {
@Test
fun export_project_with_failed_direct_target_succeeds() {
val projectTargets = setOf(BuildTargetIdentifier("a"), BuildTargetIdentifier("b"))
val failedTargets = setOf(BuildTargetIdentifier("a"))

try {
BloopExporter.validateNoFailedExternalTargets(projectTargets, failedTargets)
} catch (ex: BazelExportFailedException) {
fail(ex)
}
}

@Test
fun export_project_with_failed_transitive_target_fails() {
val projectTargets = setOf(BuildTargetIdentifier("a"), BuildTargetIdentifier("b"))
val failedTargets = setOf(BuildTargetIdentifier("c"))

try {
BloopExporter.validateNoFailedExternalTargets(projectTargets, failedTargets)
} catch (ex: BazelExportFailedException) {
return
}
fail("a BazelExportFailedException was expected but none was thrown")
}
}

0 comments on commit 0107ce5

Please sign in to comment.