aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Ulf Adams <ulfjack@google.com>2015-09-23 16:32:42 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2015-09-24 14:17:03 +0000
commita385ab9705b0bd04c48010f86c4120bacc48b9f3 (patch)
treee9c8f828d02ef0820b573279136bc2f494d3f2fb /src
parent532450eeca2d88bf465f69d00fcec19b2009a50b (diff)
Rewrite TargetProviderEnvironment to use a PackageProvider.
This is one step towards eliminating LoadedPackageProvider. -- MOS_MIGRATED_REVID=103752861
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationEnvironment.java39
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ActionArtifactCycleReporter.java2
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),