From 62dd5115e6abfd807e5ed7579e4bcf97fb05b6b1 Mon Sep 17 00:00:00 2001 From: twerth Date: Fri, 22 Jun 2018 02:26:25 -0700 Subject: Add ConfiguredTargetValueAccessor. This will be necessary for the action graph query which operates on ConfiguredTargetValue's. RELNOTES: None PiperOrigin-RevId: 201657526 --- .../build/lib/query2/ConfiguredTargetAccessor.java | 10 +- .../lib/query2/ConfiguredTargetValueAccessor.java | 121 +++++++++++++++++++++ 2 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetValueAccessor.java (limited to 'src/main/java/com/google/devtools/build') 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 99fa621325..d629709a77 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 @@ -29,7 +29,10 @@ import com.google.devtools.build.skyframe.WalkableGraph; import java.util.List; import java.util.Set; -/** A {@link TargetAccessor} for {@link ConfiguredTarget} objects. Incomplete. */ +/** A {@link TargetAccessor} for {@link ConfiguredTarget} objects. + * + * Incomplete; we'll implement getLabelListAttr and getVisibility when needed. + */ class ConfiguredTargetAccessor implements TargetAccessor { private final WalkableGraph walkableGraph; @@ -109,6 +112,11 @@ class ConfiguredTargetAccessor implements TargetAccessor { } public Target getTargetFromConfiguredTarget(ConfiguredTarget configuredTarget) { + return getTargetFromConfiguredTarget(configuredTarget, walkableGraph); + } + + public static Target getTargetFromConfiguredTarget( + ConfiguredTarget configuredTarget, WalkableGraph walkableGraph) { Target target = null; try { Label label = diff --git a/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetValueAccessor.java b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetValueAccessor.java new file mode 100644 index 0000000000..db8d40e1db --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/query2/ConfiguredTargetValueAccessor.java @@ -0,0 +1,121 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.query2; + +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.ConfiguredTargetValue; +import com.google.devtools.build.skyframe.WalkableGraph; +import java.util.List; +import java.util.Set; + +/** A {@link TargetAccessor} for {@link ConfiguredTargetValue} objects. + * + * Incomplete; we'll implement getLabelListAttr and getVisibility when needed. + */ +class ConfiguredTargetValueAccessor implements TargetAccessor { + + private final WalkableGraph walkableGraph; + + ConfiguredTargetValueAccessor(WalkableGraph walkableGraph) { + this.walkableGraph = walkableGraph; + } + + @Override + public String getTargetKind(ConfiguredTargetValue configuredTargetValue) { + Target actualTarget = getTargetFromConfiguredTargetValue(configuredTargetValue); + return actualTarget.getTargetKind(); + } + + @Override + public String getLabel(ConfiguredTargetValue configuredTargetValue) { + return configuredTargetValue.getConfiguredTarget().getLabel().toString(); + } + + @Override + public String getPackage(ConfiguredTargetValue configuredTargetValue) { + return configuredTargetValue + .getConfiguredTarget() + .getLabel() + .getPackageIdentifier() + .getPackageFragment() + .toString(); + } + + @Override + public boolean isRule(ConfiguredTargetValue configuredTargetValue) { + Target actualTarget = getTargetFromConfiguredTargetValue(configuredTargetValue); + return actualTarget instanceof Rule; + } + + @Override + public boolean isTestRule(ConfiguredTargetValue configuredTargetValue) { + Target actualTarget = getTargetFromConfiguredTargetValue(configuredTargetValue); + return TargetUtils.isTestRule(actualTarget); + } + + @Override + public boolean isTestSuite(ConfiguredTargetValue configuredTargetValue) { + Target actualTarget = getTargetFromConfiguredTargetValue(configuredTargetValue); + return TargetUtils.isTestSuiteRule(actualTarget); + } + + @Override + public List getLabelListAttr( + QueryExpression caller, + ConfiguredTargetValue configuredTargetValue, + String attrName, + String errorMsgPrefix) + throws QueryException, InterruptedException { + // TODO(bazel-team): implement this if needed. + throw new UnsupportedOperationException(); + } + + @Override + public List getStringListAttr( + ConfiguredTargetValue configuredTargetValue, String attrName) { + Target actualTarget = getTargetFromConfiguredTargetValue(configuredTargetValue); + return TargetUtils.getStringListAttr(actualTarget, attrName); + } + + @Override + public String getStringAttr(ConfiguredTargetValue configuredTargetValue, String attrName) { + Target actualTarget = getTargetFromConfiguredTargetValue(configuredTargetValue); + return TargetUtils.getStringAttr(actualTarget, attrName); + } + + @Override + public Iterable getAttrAsString( + ConfiguredTargetValue configuredTargetValue, String attrName) { + Target actualTarget = getTargetFromConfiguredTargetValue(configuredTargetValue); + return TargetUtils.getAttrAsString(actualTarget, attrName); + } + + @Override + public Set> getVisibility(ConfiguredTargetValue from) + throws QueryException, InterruptedException { + // TODO(bazel-team): implement this if needed. + throw new UnsupportedOperationException(); + } + + private Target getTargetFromConfiguredTargetValue(ConfiguredTargetValue configuredTargetValue) { + return ConfiguredTargetAccessor.getTargetFromConfiguredTarget( + configuredTargetValue.getConfiguredTarget(), walkableGraph); + } +} -- cgit v1.2.3