Fix native.existing_rule() when argument is an existing file -- MOS_MIGRATED_REVID=127218963
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java index c05e178..9a575ed 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -886,7 +886,7 @@ private static SkylarkDict<String, Object> targetDict( Target target, Location loc, Environment env) throws NotRepresentableException, EvalException { - if (target == null && !(target instanceof Rule)) { + if (target == null || !(target instanceof Rule)) { return null; } SkylarkDict<String, Object> values = SkylarkDict.<String, Object>of(env);
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java index 1a430ed..9f6d170 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleContextTest.java
@@ -475,6 +475,24 @@ } @Test + public void testExistingRuleReturnNone() throws Exception { + scratch.file( + "test/rulestr.bzl", + "def test_rule(name, x):", + " print(native.existing_rule(x))", + " if native.existing_rule(x) == None:", + " native.cc_library(name = name)"); + scratch.file( + "test/BUILD", + "load('//test:rulestr.bzl', 'test_rule')", + "test_rule('a', 'does not exist')", + "test_rule('b', 'BUILD')"); + + assertNotNull(getConfiguredTarget("//test:a")); + assertNotNull(getConfiguredTarget("//test:b")); + } + + @Test public void testGetRule() throws Exception { scratch.file("test/skylark/BUILD"); scratch.file(