Add toolchains data to RuleClass and RuleContext.

Also expose both sides to Skylark.
Part of #2219.

Change-Id: I4d749dd9981fe33f75310acb0ec3927cff6f28fe
PiperOrigin-RevId: 156340638
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 8852be8..2be126b 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
@@ -42,6 +42,7 @@
 import com.google.devtools.build.lib.packages.SkylarkClassObject;
 import com.google.devtools.build.lib.packages.SkylarkClassObjectConstructor;
 import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
+import com.google.devtools.build.lib.packages.ToolchainConstructor;
 import com.google.devtools.build.lib.rules.SkylarkAttr;
 import com.google.devtools.build.lib.rules.SkylarkAttr.Descriptor;
 import com.google.devtools.build.lib.rules.SkylarkFileType;
@@ -1377,5 +1378,15 @@
           + "provided.");
     }
   }
-}
 
+  @Test
+  public void testRuleAddToolchain() throws Exception {
+    evalAndExport(
+        "my_toolchain_type = platform_common.toolchain_type()",
+        "def impl(ctx): return None",
+        "r1 = rule(impl, toolchains=[my_toolchain_type])");
+    ToolchainConstructor toolchain = (ToolchainConstructor) lookup("my_toolchain_type");
+    RuleClass c = ((RuleFunction) lookup("r1")).getRuleClass();
+    assertThat(c.getRequiredToolchains()).containsExactly(toolchain.getKey());
+  }
+}