Rule functions should return None instead of internal Rule objects

PiperOrigin-RevId: 159438112
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
index f6a34e9..50c4775 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java
@@ -44,6 +44,7 @@
 import com.google.devtools.build.lib.rules.SkylarkAttr.Descriptor;
 import com.google.devtools.build.lib.rules.SkylarkFileType;
 import com.google.devtools.build.lib.rules.SkylarkRuleClassFunctions.RuleFunction;
+import com.google.devtools.build.lib.rules.SkylarkRuleContext;
 import com.google.devtools.build.lib.skyframe.SkylarkImportLookupFunction;
 import com.google.devtools.build.lib.skylark.util.SkylarkTestCase;
 import com.google.devtools.build.lib.syntax.BuildFileAST;
@@ -1389,4 +1390,30 @@
     RuleClass c = ((RuleFunction) lookup("r1")).getRuleClass();
     assertThat(c.getRequiredToolchains()).containsExactly(toolchain.getKey());
   }
+
+  @Test
+  public void testRuleFunctionReturnsNone() throws Exception {
+    scratch.file("test/rule.bzl",
+        "def _impl(ctx):",
+        "  pass",
+        "foo_rule = rule(",
+        "  implementation = _impl,",
+        "  attrs = {'params': attr.string_list()},",
+        ")");
+    scratch.file("test/BUILD",
+        "load(':rule.bzl', 'foo_rule')",
+        "r = foo_rule(name='foo')",  // Custom rule should return None
+        "c = cc_library(name='cc')", // Native rule should return None
+        "",
+        "foo_rule(",
+        "    name='check',",
+        "    params = [type(r), type(c)]",
+        ")");
+    invalidatePackages();
+    SkylarkRuleContext context = createRuleContext("//test:check");
+    @SuppressWarnings("unchecked")
+    MutableList<Object> params = (MutableList<Object>) context.getAttr().getValue("params");
+    assertThat(params.get(0)).isEqualTo("NoneType");
+    assertThat(params.get(1)).isEqualTo("NoneType");
+  }
 }