aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Kristina Chodorow <kchodorow@google.com>2015-04-22 14:11:16 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2015-04-23 09:09:56 +0000
commit5acec4c9115df63a0aee582c6796ebc0f2e71bd7 (patch)
treee62b7d697d8fcb2e8fac1253f852f6d2f1cc801b
parentdc30c07cc597104fccef63b9fee1948a2324fc5e (diff)
Only check visibility when the rule class has the attribute
Fixes #150. -- MOS_MIGRATED_REVID=91785592
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java8
-rwxr-xr-xsrc/test/shell/bazel/local_repository_test.sh14
2 files changed, 21 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java b/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java
index e2cf9eac66..ffc1fef5b6 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/LabelVisitor.java
@@ -35,7 +35,9 @@ import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.PackageGroup;
import com.google.devtools.build.lib.packages.Rule;
+import com.google.devtools.build.lib.packages.RuleClass;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.pkgcache.PackageProvider;
import com.google.devtools.build.lib.pkgcache.TargetEdgeObserver;
import com.google.devtools.build.lib.syntax.Label;
@@ -365,7 +367,11 @@ final class LabelVisitor {
private void visitTargetVisibility(Target target, int depth, int count) {
Attribute attribute = null;
if (target instanceof Rule) {
- attribute = ((Rule) target).getRuleClassObject().getAttributeByName("visibility");
+ RuleClass ruleClass = ((Rule) target).getRuleClassObject();
+ if (!ruleClass.hasAttr("visibility", Type.NODEP_LABEL_LIST)) {
+ return;
+ }
+ attribute = ruleClass.getAttributeByName("visibility");
}
for (Label label : target.getVisibility().getDependencyLabels()) {
diff --git a/src/test/shell/bazel/local_repository_test.sh b/src/test/shell/bazel/local_repository_test.sh
index e891487f83..166e202570 100755
--- a/src/test/shell/bazel/local_repository_test.sh
+++ b/src/test/shell/bazel/local_repository_test.sh
@@ -421,4 +421,18 @@ EOF
expect_log "My number is 3"
}
+function test_external_query() {
+ local external_dir=$TEST_TMPDIR/x
+ mkdir -p $external_dir
+ touch $external_dir/WORKSPACE
+ cat > WORKSPACE <<EOF
+local_repository(
+ name = "my-repo",
+ path = "$external_dir",
+)
+EOF
+ bazel query 'deps(//external:*)' >& $TEST_log || fail "query failed"
+ expect_log "//external:my-repo"
+}
+
run_suite "local repository tests"