aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar mjhalupka <mjhalupka@google.com>2018-01-30 11:35:47 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-01-30 11:37:49 -0800
commit426ab9067374bfe5af033e22153507c3f38e7221 (patch)
treec6dde0a81773d27b23a944bfcbe078baef856c27 /src
parentbe55e1181fd49ef78c24255f66f8d26882730af1 (diff)
Add a way to get a Target from the WalkableGraph instead of using
ConfiguredTarget.getTarget(). Might have reduced performance because we're doing some more lookups in the accessor now. PiperOrigin-RevId: 183864924
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java51
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java3
2 files changed, 45 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java
index 7d60fc75c0..cfba199f77 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java
@@ -14,20 +14,32 @@
package com.google.devtools.build.lib.query2;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.Rule;
+import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.query2.engine.QueryEnvironment.TargetAccessor;
import com.google.devtools.build.lib.query2.engine.QueryException;
import com.google.devtools.build.lib.query2.engine.QueryExpression;
import com.google.devtools.build.lib.query2.engine.QueryVisibility;
+import com.google.devtools.build.lib.skyframe.PackageValue;
+import com.google.devtools.build.skyframe.WalkableGraph;
import java.util.List;
import java.util.Set;
/** A {@link TargetAccessor} for {@link ConfiguredTarget} objects. Incomplete. */
class ConfiguredTargetAccessor implements TargetAccessor<ConfiguredTarget> {
+
+ private final WalkableGraph walkableGraph;
+
+ ConfiguredTargetAccessor(WalkableGraph walkableGraph) {
+ this.walkableGraph = walkableGraph;
+ }
+
@Override
public String getTargetKind(ConfiguredTarget target) {
- return target.getTarget().getTargetKind();
+ Target actualTarget = getTargetFromConfiguredTarget(target);
+ return actualTarget.getTargetKind();
}
@Override
@@ -37,22 +49,25 @@ class ConfiguredTargetAccessor implements TargetAccessor<ConfiguredTarget> {
@Override
public String getPackage(ConfiguredTarget target) {
- return target.getTarget().getPackage().getNameFragment().toString();
+ return target.getLabel().getPackageIdentifier().getPackageFragment().toString();
}
@Override
public boolean isRule(ConfiguredTarget target) {
- return target.getTarget() instanceof Rule;
+ Target actualTarget = getTargetFromConfiguredTarget(target);
+ return actualTarget instanceof Rule;
}
@Override
public boolean isTestRule(ConfiguredTarget target) {
- return TargetUtils.isTestRule(target.getTarget());
+ Target actualTarget = getTargetFromConfiguredTarget(target);
+ return TargetUtils.isTestRule(actualTarget);
}
@Override
public boolean isTestSuite(ConfiguredTarget target) {
- return TargetUtils.isTestSuiteRule(target.getTarget());
+ Target actualTarget = getTargetFromConfiguredTarget(target);
+ return TargetUtils.isTestSuiteRule(actualTarget);
}
@Override
@@ -68,17 +83,20 @@ class ConfiguredTargetAccessor implements TargetAccessor<ConfiguredTarget> {
@Override
public List<String> getStringListAttr(ConfiguredTarget target, String attrName) {
- return TargetUtils.getStringListAttr(target.getTarget(), attrName);
+ Target actualTarget = getTargetFromConfiguredTarget(target);
+ return TargetUtils.getStringListAttr(actualTarget, attrName);
}
@Override
public String getStringAttr(ConfiguredTarget target, String attrName) {
- return TargetUtils.getStringAttr(target.getTarget(), attrName);
+ Target actualTarget = getTargetFromConfiguredTarget(target);
+ return TargetUtils.getStringAttr(actualTarget, attrName);
}
@Override
public Iterable<String> getAttrAsString(ConfiguredTarget target, String attrName) {
- return TargetUtils.getAttrAsString(target.getTarget(), attrName);
+ Target actualTarget = getTargetFromConfiguredTarget(target);
+ return TargetUtils.getAttrAsString(actualTarget, attrName);
}
@Override
@@ -87,4 +105,21 @@ class ConfiguredTargetAccessor implements TargetAccessor<ConfiguredTarget> {
// TODO(bazel-team): implement this if needed.
throw new UnsupportedOperationException();
}
+
+ private Target getTargetFromConfiguredTarget(ConfiguredTarget configuredTarget) {
+ Target target = null;
+ try {
+ target =
+ ((PackageValue)
+ walkableGraph.getValue(
+ PackageValue.key(configuredTarget.getLabel().getPackageIdentifier())))
+ .getPackage()
+ .getTarget(configuredTarget.getLabel().getName());
+ } catch (NoSuchTargetException e) {
+ throw new IllegalStateException("Unable to get target from package in accessor.");
+ } catch (InterruptedException e2) {
+ throw new IllegalStateException("Thread interrupted in the middle of getting a Target.");
+ }
+ return target;
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
index 8321d91b93..b48bc1db35 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java
@@ -98,7 +98,7 @@ public class ConfiguredTargetQueryEnvironment
private final String parserPrefix;
protected final PathPackageLocator pkgPath;
private final Supplier<WalkableGraph> walkableGraphSupplier;
- private final ConfiguredTargetAccessor accessor = new ConfiguredTargetAccessor();
+ private ConfiguredTargetAccessor accessor;
protected WalkableGraph graph;
private static final Function<ConfiguredTarget, SkyKey> CT_TO_SKYKEY =
@@ -152,6 +152,7 @@ public class ConfiguredTargetQueryEnvironment
eventHandler,
FilteringPolicies.NO_FILTER,
MultisetSemaphore.unbounded());
+ accessor = new ConfiguredTargetAccessor(walkableGraphSupplier.get());
checkSettings(settings);
}