diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
3 files changed, 30 insertions, 13 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationEnvironment.java index f6d4730678..010e5852aa 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationEnvironment.java @@ -17,15 +17,18 @@ package com.google.devtools.build.lib.analysis.config; import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.concurrent.Uninterruptibles; +import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.packages.Target; -import com.google.devtools.build.lib.pkgcache.LoadedPackageProvider; import com.google.devtools.build.lib.pkgcache.PackageProvider; import com.google.devtools.build.lib.pkgcache.TargetProvider; import com.google.devtools.build.lib.vfs.Path; +import java.util.concurrent.Callable; + import javax.annotation.Nullable; /** @@ -58,24 +61,38 @@ public interface ConfigurationEnvironment { * An implementation backed by a {@link PackageProvider} instance. */ public static final class TargetProviderEnvironment implements ConfigurationEnvironment { - - private final LoadedPackageProvider loadedPackageProvider; + private final PackageProvider packageProvider; + private final EventHandler eventHandler; private final BlazeDirectories blazeDirectories; - public TargetProviderEnvironment(LoadedPackageProvider loadedPackageProvider, - BlazeDirectories blazeDirectories) { - this.loadedPackageProvider = loadedPackageProvider; + public TargetProviderEnvironment(PackageProvider packageProvider, + EventHandler eventHandler, BlazeDirectories blazeDirectories) { + this.packageProvider = packageProvider; + this.eventHandler = eventHandler; this.blazeDirectories = blazeDirectories; } - public TargetProviderEnvironment(LoadedPackageProvider loadedPackageProvider) { - this.loadedPackageProvider = loadedPackageProvider; - this.blazeDirectories = null; + public TargetProviderEnvironment(PackageProvider packageProvider, + EventHandler eventHandler) { + this(packageProvider, eventHandler, null); } @Override - public Target getTarget(Label label) throws NoSuchPackageException, NoSuchTargetException { - return loadedPackageProvider.getLoadedTarget(label); + public Target getTarget(final Label label) + throws NoSuchPackageException, NoSuchTargetException { + try { + return Uninterruptibles.callUninterruptibly(new Callable<Target>() { + @Override + public Target call() + throws NoSuchPackageException, NoSuchTargetException, InterruptedException { + return packageProvider.getTarget(eventHandler, label); + } + }); + } catch (NoSuchPackageException | NoSuchTargetException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException(e); + } } @Override diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java index bc9d0c41a6..84639eab6e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java +++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java @@ -478,7 +478,7 @@ public class GenQuery implements RuleConfiguredTargetFactory { @Override public Target getTarget(EventHandler eventHandler, Label label) - throws NoSuchPackageException, NoSuchTargetException, InterruptedException { + throws NoSuchPackageException, NoSuchTargetException { Preconditions.checkState(targets.contains(label), label); Package pkg = Preconditions.checkNotNull(pkgMap.get(label.getPackageIdentifier()), label); Target target = Preconditions.checkNotNull(pkg.getTarget(label.getName()), label); diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java index 7217708e56..7b84181d82 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java @@ -30,7 +30,7 @@ import com.google.devtools.build.skyframe.SkyKey; * Reports cycles between Actions and Artifacts. These indicates cycles within a rule. */ public class ActionArtifactCycleReporter extends AbstractLabelCycleReporter { - + @SuppressWarnings("unchecked") private static final Predicate<SkyKey> IS_ARTIFACT_OR_ACTION_SKY_KEY = Predicates.or( SkyFunctions.isSkyFunction(SkyFunctions.ARTIFACT), SkyFunctions.isSkyFunction(SkyFunctions.ACTION_EXECUTION), |