-
Notifications
You must be signed in to change notification settings - Fork 46
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[fix] now sources of thrift dependencies are included as dependencies (…
…#202) * thrift language plugin * lil aspects cleanup * format * changelog * dependency tree * thrift proto cleanup * changelog update * test update * review fixesssss * rebase fixx
- Loading branch information
Showing
15 changed files
with
478 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
server/src/main/java/org/jetbrains/bsp/bazel/server/sync/dependencytree/BUILD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
load("@rules_java//java:defs.bzl", "java_library") | ||
|
||
java_library( | ||
name = "dependencytree", | ||
srcs = glob(["*.java"]), | ||
visibility = ["//visibility:public"], | ||
exports = [ | ||
"//server/src/main/java/org/jetbrains/bsp/bazel/server/sync/proto:bsp_target_info_java_proto", | ||
"@com_google_protobuf//:protobuf_java", | ||
"@maven//:io_vavr_vavr", | ||
], | ||
deps = [ | ||
"//server/src/main/java/org/jetbrains/bsp/bazel/server/sync/proto:bsp_target_info_java_proto", | ||
"@com_google_protobuf//:protobuf_java", | ||
"@maven//:io_vavr_vavr", | ||
], | ||
) |
71 changes: 71 additions & 0 deletions
71
server/src/main/java/org/jetbrains/bsp/bazel/server/sync/dependencytree/DependencyTree.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package org.jetbrains.bsp.bazel.server.sync.dependencytree; | ||
|
||
import io.vavr.Lazy; | ||
import io.vavr.collection.HashSet; | ||
import io.vavr.collection.Map; | ||
import io.vavr.collection.Set; | ||
import org.jetbrains.bsp.bazel.info.BspTargetInfo.Dependency; | ||
import org.jetbrains.bsp.bazel.info.BspTargetInfo.TargetInfo; | ||
|
||
public class DependencyTree { | ||
private final Set<String> rootTargets; | ||
private final Map<String, TargetInfo> idToTargetInfo; | ||
private final Map<String, Lazy<Set<TargetInfo>>> idToLazyTransitiveDependencies; | ||
|
||
public DependencyTree(Map<String, TargetInfo> idToTargetInfo, Set<String> rootTargets) { | ||
this.rootTargets = rootTargets; | ||
this.idToTargetInfo = idToTargetInfo; | ||
this.idToLazyTransitiveDependencies = createIdToLazyTransitiveDependenciesMap(idToTargetInfo); | ||
} | ||
|
||
private Map<String, Lazy<Set<TargetInfo>>> createIdToLazyTransitiveDependenciesMap( | ||
Map<String, TargetInfo> idToTargetInfo) { | ||
return idToTargetInfo.mapValues(this::calculateLazyTransitiveDependenciesForTarget); | ||
} | ||
|
||
private Lazy<Set<TargetInfo>> calculateLazyTransitiveDependenciesForTarget( | ||
TargetInfo targetInfo) { | ||
return Lazy.of(() -> calculateTransitiveDependenciesForTarget(targetInfo)); | ||
} | ||
|
||
private Set<TargetInfo> calculateTransitiveDependenciesForTarget(TargetInfo targetInfo) { | ||
var dependencies = getDependencies(targetInfo); | ||
var strictlyTransitiveDependencies = calculateStrictlyTransitiveDependencies(dependencies); | ||
var directDependencies = calculateDirectDependencies(dependencies); | ||
|
||
return strictlyTransitiveDependencies.addAll(directDependencies); | ||
} | ||
|
||
private Set<TargetInfo> calculateStrictlyTransitiveDependencies(Set<String> dependencies) { | ||
return dependencies.flatMap(idToLazyTransitiveDependencies::get).flatMap(Lazy::get); | ||
} | ||
|
||
private Set<TargetInfo> calculateDirectDependencies(Set<String> dependencies) { | ||
return dependencies.flatMap(idToTargetInfo::get); | ||
} | ||
|
||
public Set<TargetInfo> transitiveDependenciesWithoutRootTargets(String targetId) { | ||
var target = idToTargetInfo.get(targetId); | ||
|
||
return target | ||
.toSet() | ||
.flatMap(this::getDependencies) | ||
.filter(this::isNotARootTarget) | ||
.flatMap(this::collectTransitiveDependenciesAndAddTarget); | ||
} | ||
|
||
private Set<String> getDependencies(TargetInfo target) { | ||
return HashSet.ofAll(target.getDependenciesList()).map(Dependency::getId); | ||
} | ||
|
||
private boolean isNotARootTarget(String targetId) { | ||
return !rootTargets.contains(targetId); | ||
} | ||
|
||
private Set<TargetInfo> collectTransitiveDependenciesAndAddTarget(String targetId) { | ||
var target = idToTargetInfo.get(targetId).toSet(); | ||
var dependencies = idToLazyTransitiveDependencies.get(targetId).toSet().flatMap(Lazy::get); | ||
|
||
return dependencies.addAll(target); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
37 changes: 37 additions & 0 deletions
37
.../main/java/org/jetbrains/bsp/bazel/server/sync/languages/thrift/ThriftLanguagePlugin.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
package org.jetbrains.bsp.bazel.server.sync.languages.thrift; | ||
|
||
import ch.epfl.scala.bsp4j.BuildTarget; | ||
import io.vavr.collection.Set; | ||
import java.net.URI; | ||
import org.jetbrains.bsp.bazel.info.BspTargetInfo.TargetInfo; | ||
import org.jetbrains.bsp.bazel.server.sync.BazelPathsResolver; | ||
import org.jetbrains.bsp.bazel.server.sync.dependencytree.DependencyTree; | ||
import org.jetbrains.bsp.bazel.server.sync.languages.LanguagePlugin; | ||
|
||
public class ThriftLanguagePlugin extends LanguagePlugin<ThriftModule> { | ||
private static final String THRIFT_LIBRARY_RULE_NAME = "thrift_library"; | ||
|
||
private final BazelPathsResolver bazelPathsResolver; | ||
|
||
public ThriftLanguagePlugin(BazelPathsResolver bazelPathsResolver) { | ||
this.bazelPathsResolver = bazelPathsResolver; | ||
} | ||
|
||
@Override | ||
public Set<URI> dependencySources(TargetInfo targetInfo, DependencyTree dependencyTree) { | ||
return dependencyTree | ||
.transitiveDependenciesWithoutRootTargets(targetInfo.getId()) | ||
.filter(this::isThriftLibrary) | ||
.flatMap(TargetInfo::getSourcesList) | ||
.map(bazelPathsResolver::resolveUri); | ||
} | ||
|
||
private boolean isThriftLibrary(TargetInfo target) { | ||
return target.getKind().equals(THRIFT_LIBRARY_RULE_NAME); | ||
} | ||
|
||
@Override | ||
protected void applyModuleData(ThriftModule moduleData, BuildTarget buildTarget) { | ||
// no actions needed | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
server/src/main/java/org/jetbrains/bsp/bazel/server/sync/languages/thrift/ThriftModule.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
package org.jetbrains.bsp.bazel.server.sync.languages.thrift; | ||
|
||
import org.jetbrains.bsp.bazel.server.sync.languages.LanguageData; | ||
|
||
public class ThriftModule implements LanguageData {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
11 changes: 11 additions & 0 deletions
11
server/src/test/java/org/jetbrains/bsp/bazel/server/sync/dependencytree/BUILD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
load("//:junit5.bzl", "java_junit5_test") | ||
|
||
java_junit5_test( | ||
name = "DependencyTreeTest", | ||
size = "small", | ||
srcs = ["DependencyTreeTest.java"], | ||
test_package = "org.jetbrains.bsp.bazel.server.sync.dependencytree", | ||
deps = [ | ||
"//server/src/main/java/org/jetbrains/bsp/bazel/server/sync/dependencytree", | ||
], | ||
) |
Oops, something went wrong.