Add isSkylark to RuleClass

--
MOS_MIGRATED_REVID=106588003
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 6429203..7846250 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -563,9 +563,9 @@
       Preconditions.checkState(skylarkExecutable == (ruleDefinitionEnvironment != null));
       Preconditions.checkState(workspaceOnly || externalBindingsFunction == NO_EXTERNAL_BINDINGS);
 
-      return new RuleClass(name, skylarkExecutable, documented, publicByDefault, binaryOutput,
-          workspaceOnly, outputsDefaultExecutable, implicitOutputsFunction, configurator,
-          configuredTargetFactory, validityPredicate, preferredDependencyPredicate,
+      return new RuleClass(name, skylark, skylarkExecutable, documented, publicByDefault,
+          binaryOutput, workspaceOnly, outputsDefaultExecutable, implicitOutputsFunction,
+          configurator, configuredTargetFactory, validityPredicate, preferredDependencyPredicate,
           ImmutableSet.copyOf(advertisedProviders), configuredTargetFunction,
           externalBindingsFunction, ruleDefinitionEnvironment, configurationFragmentPolicy.build(),
           supportsConstraintChecking, attributes.values().toArray(new Attribute[0]));
@@ -883,6 +883,7 @@
    */
   private final String targetKind;
 
+  private final boolean isSkylark;
   private final boolean skylarkExecutable;
   private final boolean documented;
   private final boolean publicByDefault;
@@ -963,7 +964,7 @@
   private final boolean supportsConstraintChecking;
 
   /**
-   * Helper constructor that skips allowedConfigurationFragmentNames and fragmentNameResolver
+   * Helper constructor that skips allowedConfigurationFragmentNames and fragmentNameResolver.
    */
   @VisibleForTesting
   RuleClass(String name,
@@ -987,6 +988,7 @@
       boolean supportsConstraintChecking,
       Attribute... attributes) {
     this(name,
+        /*isSkylark=*/ skylarkExecutable,
         skylarkExecutable,
         documented,
         publicByDefault,
@@ -1034,7 +1036,7 @@
    */
   @VisibleForTesting
   RuleClass(String name,
-      boolean skylarkExecutable, boolean documented, boolean publicByDefault,
+      boolean isSkylark, boolean skylarkExecutable, boolean documented, boolean publicByDefault,
       boolean binaryOutput, boolean workspaceOnly, boolean outputsDefaultExecutable,
       ImplicitOutputsFunction implicitOutputsFunction,
       Configurator<?, ?> configurator,
@@ -1048,6 +1050,7 @@
       boolean supportsConstraintChecking,
       Attribute... attributes) {
     this.name = name;
+    this.isSkylark = isSkylark;
     this.targetKind = name + " rule";
     this.skylarkExecutable = skylarkExecutable;
     this.documented = documented;
@@ -1613,6 +1616,11 @@
     return ruleDefinitionEnvironment;
   }
 
+  /** Returns true if this RuleClass is a skylark-defined RuleClass. */
+  public boolean isSkylark() {
+    return isSkylark;
+  }
+
   /**
    * Returns true if this RuleClass is an executable Skylark RuleClass (i.e. it is
    * Skylark and Normal or Test RuleClass).
diff --git a/src/main/protobuf/build.proto b/src/main/protobuf/build.proto
index 6a29983..a3f4c19 100644
--- a/src/main/protobuf/build.proto
+++ b/src/main/protobuf/build.proto
@@ -239,6 +239,9 @@
 
   // The rule's class's public by default value.
   optional bool public_by_default = 9;
+
+  // If this rule is of a skylark-defined RuleClass.
+  optional bool is_skylark = 10;
 }
 
 // Summary of all transitive dependencies of 'rule,' where each dependent