diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetAccessor.java | 51 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetQueryEnvironment.java | 3 |
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); } |