diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java index 0bef37dfa648e3..9a19b105fe3353 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ResolvedToolchainContext.java @@ -32,6 +32,7 @@ import com.google.devtools.build.lib.rules.AliasConfiguredTarget; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; import com.google.devtools.build.lib.skyframe.ToolchainException; +import com.google.devtools.build.lib.skyframe.UnloadedToolchainContext; import com.google.devtools.build.lib.skylarkbuildapi.ToolchainContextApi; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; import com.google.devtools.build.lib.skylarkinterface.StarlarkContext; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainResolver.java index ead2d5268edce5..458b8fad9131b4 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ToolchainResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ToolchainResolver.java @@ -42,6 +42,7 @@ import com.google.devtools.build.lib.skyframe.SingleToolchainResolutionFunction.NoToolchainFoundException; import com.google.devtools.build.lib.skyframe.SingleToolchainResolutionValue; import com.google.devtools.build.lib.skyframe.ToolchainException; +import com.google.devtools.build.lib.skyframe.UnloadedToolchainContext; import com.google.devtools.build.skyframe.SkyFunction.Environment; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.ValueOrException2; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java index 6dde831d56c641..743c7d29228596 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java @@ -32,7 +32,6 @@ import com.google.devtools.build.lib.analysis.ResolvedToolchainContext; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.ToolchainResolver; -import com.google.devtools.build.lib.analysis.UnloadedToolchainContext; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java index fd9e90eea7d4d2..b36f10586244b8 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java @@ -38,7 +38,6 @@ import com.google.devtools.build.lib.analysis.ResolvedToolchainContext; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.ToolchainResolver; -import com.google.devtools.build.lib.analysis.UnloadedToolchainContext; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildOptions; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsCycleReporter.java index 4bd0451cfcf308..cb3f7f07562c53 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsCycleReporter.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsCycleReporter.java @@ -14,9 +14,13 @@ package com.google.devtools.build.lib.skyframe; +import static java.util.stream.Collectors.joining; + import com.google.common.base.Function; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.events.Event; @@ -41,6 +45,15 @@ public class RegisteredToolchainsCycleReporter implements CyclesReporter.SingleC private static final Predicate IS_SINGLE_TOOLCHAIN_RESOLUTION_SKY_KEY = SkyFunctions.isSkyFunction(SkyFunctions.SINGLE_TOOLCHAIN_RESOLUTION); + private static final Predicate IS_TOOLCHAIN_RESOLUTION_SKY_KEY = + SkyFunctions.isSkyFunction(SkyFunctions.TOOLCHAIN_RESOLUTION); + + private static final Predicate IS_TOOLCHAIN_RELATED = + Predicates.or( + IS_REGISTERED_TOOLCHAINS_SKY_KEY, + IS_SINGLE_TOOLCHAIN_RESOLUTION_SKY_KEY, + IS_TOOLCHAIN_RESOLUTION_SKY_KEY); + @Override public boolean maybeReportCycle( SkyKey topLevelKey, @@ -50,9 +63,7 @@ public boolean maybeReportCycle( ImmutableList cycle = cycleInfo.getCycle(); if (alreadyReported) { return true; - } else if (!Iterables.any(cycle, IS_REGISTERED_TOOLCHAINS_SKY_KEY) - || !Iterables.any(cycle, IS_CONFIGURED_TARGET_SKY_KEY) - || !Iterables.any(cycle, IS_SINGLE_TOOLCHAIN_RESOLUTION_SKY_KEY)) { + } else if (!Iterables.any(cycle, IS_TOOLCHAIN_RELATED)) { return false; } @@ -63,24 +74,28 @@ public boolean maybeReportCycle( } Function printer = - new Function() { - @Override - public String apply(SkyKey input) { - if (input.argument() instanceof ConfiguredTargetKey) { - Label label = ((ConfiguredTargetKey) input.argument()).getLabel(); - return label.toString(); - } - if (input.argument() instanceof RegisteredToolchainsValue.Key) { - return "RegisteredToolchains"; - } - if (input.argument() instanceof SingleToolchainResolutionValue.Key) { - Label toolchainType = - ((SingleToolchainResolutionValue.Key) input.argument()).toolchainTypeLabel(); - return String.format("toolchain type %s", toolchainType.toString()); - } else { - throw new UnsupportedOperationException(); - } + input -> { + if (input.argument() instanceof ConfiguredTargetKey) { + Label label = ((ConfiguredTargetKey) input.argument()).getLabel(); + return label.toString(); + } + if (input.argument() instanceof RegisteredToolchainsValue.Key) { + return "RegisteredToolchains"; } + if (input.argument() instanceof SingleToolchainResolutionValue.Key) { + Label toolchainType = + ((SingleToolchainResolutionValue.Key) input.argument()).toolchainTypeLabel(); + return String.format("toolchain type %s", toolchainType.toString()); + } + if (input.argument() instanceof UnloadedToolchainContext.Key) { + ImmutableSet