Skip to content

Commit

Permalink
Add lazy vals for complicated calculations
Browse files Browse the repository at this point in the history
  • Loading branch information
SocksDevil committed Apr 16, 2021
1 parent c7895cd commit 5ff6d62
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 17 deletions.
18 changes: 18 additions & 0 deletions src/main/java/org/jetbrains/bsp/bazel/commons/Lazy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.jetbrains.bsp.bazel.commons;

import java.util.Optional;
import java.util.function.Supplier;

public abstract class Lazy<T> {
private Optional<Optional<T>> value = Optional.empty();

protected abstract Supplier<Optional<T>> calculateValue();

public Optional<T> getValue() {
if (value.isEmpty()) {
value = Optional.of(calculateValue().get());
}

return value.get();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,21 @@
import com.google.devtools.build.lib.query2.proto.proto2api.Build;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;
import org.jetbrains.bsp.bazel.commons.Lazy;
import org.jetbrains.bsp.bazel.commons.Uri;
import org.jetbrains.bsp.bazel.server.bazel.BazelProcess;
import org.jetbrains.bsp.bazel.server.bazel.BazelRunner;
import org.jetbrains.bsp.bazel.server.bazel.params.BazelRunnerFlag;
import org.jetbrains.bsp.bazel.server.bsp.resolvers.QueryResolver;

public class BazelBspJvmTargetManager {
public class BazelBspJvmTargetManager extends Lazy<String> {
public static final String FETCH_JAVA_VERSION_ASPECT =
"@//.bazelbsp:aspects.bzl%fetch_java_target_version";
public static final String BAZEL_JDK_CURRENT_JAVA_TOOLCHAIN =
"@bazel_tools//tools/jdk:current_java_toolchain";
private final BazelRunner bazelRunner;
private BazelBspAspectsManager bazelBspAspectsManager;
private String javaVersion;

public BazelBspJvmTargetManager(
BazelRunner bazelRunner, BazelBspAspectsManager bazelBspAspectsManager) {
Expand Down Expand Up @@ -79,20 +80,20 @@ private Optional<Build.Target> getTargetFromAttribute(Build.Attribute attribute)
}

private Optional<String> getJavaVersion() {
if (javaVersion == null) {
bazelBspAspectsManager
.fetchLinesFromAspect(BAZEL_JDK_CURRENT_JAVA_TOOLCHAIN, FETCH_JAVA_VERSION_ASPECT)
.filter(
parts ->
parts.size() == 3
&& parts.get(0).equals(BazelBspAspectsManager.DEBUG_MESSAGE)
&& parts.get(1).contains(BazelBspAspectsManager.ASPECT_LOCATION)
&& parts.get(2).chars().allMatch(Character::isDigit))
.map(parts -> parts.get(2))
.findFirst()
.ifPresent(version -> this.javaVersion = version);
}
return bazelBspAspectsManager
.fetchLinesFromAspect(BAZEL_JDK_CURRENT_JAVA_TOOLCHAIN, FETCH_JAVA_VERSION_ASPECT)
.filter(
parts ->
parts.size() == 3
&& parts.get(0).equals(BazelBspAspectsManager.DEBUG_MESSAGE)
&& parts.get(1).contains(BazelBspAspectsManager.ASPECT_LOCATION)
&& parts.get(2).chars().allMatch(Character::isDigit))
.map(parts -> parts.get(2))
.findFirst();
}

return Optional.ofNullable(javaVersion);
@Override
protected Supplier<Optional<String>> calculateValue() {
return this::getJavaVersion;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jetbrains.bsp.bazel.commons.Lazy;

public class BazelBspScalaTargetManager {
public class BazelBspScalaTargetManager extends Lazy<ScalaBuildTarget> {
private static final Logger LOGGER = LogManager.getLogger(BazelBspScalaTargetManager.class);

public static final String SCALA_LIBRARY =
Expand Down Expand Up @@ -64,4 +66,9 @@ protected Optional<ScalaBuildTarget> getScalaBuildTarget() {

return Optional.of(scalaBuildTarget);
}

@Override
protected Supplier<Optional<ScalaBuildTarget>> calculateValue() {
return this::getScalaBuildTarget;
}
}

0 comments on commit 5ff6d62

Please sign in to comment.