From 849017381db007108b3a9e25b1dbf07b7587d31c Mon Sep 17 00:00:00 2001 From: Ulf Adams Date: Thu, 28 Jan 2016 15:05:16 +0000 Subject: Refactor DependencyResolver to collect and return loading errors. This should never be triggered in production, where we always run a loading phase first and only analyze targets that load successfully. I.e., this is just plumbing which will be hooked up in a subsequent change. -- MOS_MIGRATED_REVID=113258593 --- .../devtools/build/lib/analysis/BuildView.java | 16 ++- .../build/lib/analysis/DependencyResolver.java | 154 +++++++++++++-------- .../build/lib/skyframe/AspectFunction.java | 47 ++++++- .../lib/skyframe/ConfiguredTargetFunction.java | 125 +++++++++++------ .../lib/skyframe/PostConfiguredTargetFunction.java | 3 + .../build/lib/skyframe/SkyframeBuildView.java | 3 + .../lib/skyframe/SkyframeDependencyResolver.java | 36 ++++- 7 files changed, 278 insertions(+), 106 deletions(-) (limited to 'src/main') diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java index d409560a67..403528e020 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java @@ -803,6 +803,11 @@ public class BuildView { // The error must have been reported already during analysis. } + @Override + protected void missingEdgeHook(Target from, Label to, NoSuchThingException e) { + // The error must have been reported already during analysis. + } + @Override protected Target getTarget(Label label) { if (targetCache == null) { @@ -858,12 +863,19 @@ public class BuildView { class SilentDependencyResolver extends DependencyResolver { @Override protected void invalidVisibilityReferenceHook(TargetAndConfiguration node, Label label) { - // The error must have been reported already during analysis. + throw new RuntimeException("bad visibility on " + label + " during testing unexpected"); } @Override protected void invalidPackageGroupReferenceHook(TargetAndConfiguration node, Label label) { - // The error must have been reported already during analysis. + throw new RuntimeException("bad package group on " + label + " during testing unexpected"); + } + + @Override + protected void missingEdgeHook(Target from, Label to, NoSuchThingException e) { + throw new RuntimeException( + "missing dependency from " + from.getLabel() + " to " + to + ": " + e.getMessage(), + e); } @Override diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java index 17d9d23b19..8d30b12f47 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java @@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.collect.ImmutableSortedKeyListMultimap; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.packages.Aspect; import com.google.devtools.build.lib.packages.AspectClass; import com.google.devtools.build.lib.packages.AspectDefinition; @@ -89,21 +90,56 @@ public abstract class DependencyResolver { Aspect aspect, Set configConditions) throws EvalException, InterruptedException { + NestedSetBuilder