Move BazelRuleClassProvider.J2OBJC_RULES to its own class.

PiperOrigin-RevId: 184983111
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java
index bdd31e3..b45e350 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectAwareAttributeMapper.java
@@ -61,6 +61,11 @@
   }
 
   @Override
+  public String getRuleClassName() {
+    return ruleAttributes.getRuleClassName();
+  }
+
+  @Override
   public Label getLabel() {
     return ruleAttributes.getLabel();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
index c718e04..c409ce4 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java
@@ -81,9 +81,6 @@
 import com.google.devtools.build.lib.rules.cpp.transitions.LipoDataTransitionRuleSet;
 import com.google.devtools.build.lib.rules.genrule.GenRuleBaseRule;
 import com.google.devtools.build.lib.rules.java.JavaSemantics;
-import com.google.devtools.build.lib.rules.objc.J2ObjcAspect;
-import com.google.devtools.build.lib.rules.objc.J2ObjcLibraryBaseRule;
-import com.google.devtools.build.lib.rules.objc.J2ObjcLibraryRule;
 import com.google.devtools.build.lib.rules.platform.PlatformRules;
 import com.google.devtools.build.lib.rules.proto.BazelProtoLibraryRule;
 import com.google.devtools.build.lib.rules.proto.ProtoConfiguration;
@@ -299,25 +296,6 @@
         }
       };
 
-  public static final RuleSet J2OBJC_RULES =
-      new RuleSet() {
-        @Override
-        public void init(Builder builder) {
-          String toolsRepository = checkNotNull(builder.getToolsRepository());
-          J2ObjcAspect j2ObjcAspect = new J2ObjcAspect(toolsRepository);
-
-          builder.addNativeAspectClass(j2ObjcAspect);
-          builder.addRuleDefinition(new J2ObjcLibraryBaseRule());
-          builder.addRuleDefinition(new J2ObjcLibraryRule(j2ObjcAspect));
-        }
-
-        @Override
-        public ImmutableList<RuleSet> requires() {
-          return ImmutableList.of(CoreRules.INSTANCE, CcRules.INSTANCE, JavaRules.INSTANCE,
-              ObjcRules.INSTANCE);
-        }
-      };
-
   public static final RuleSet VARIOUS_WORKSPACE_RULES =
       new RuleSet() {
         @Override
@@ -362,7 +340,7 @@
           ANDROID_RULES,
           PYTHON_RULES,
           ObjcRules.INSTANCE,
-          J2OBJC_RULES,
+          J2ObjcRules.INSTANCE,
           TestingSupportRules.INSTANCE,
           VARIOUS_WORKSPACE_RULES,
           // This rule set is a little special: it needs to depend on every configuration fragment
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/J2ObjcRules.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/J2ObjcRules.java
new file mode 100644
index 0000000..7ebd59a
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/J2ObjcRules.java
@@ -0,0 +1,51 @@
+// Copyright 2018 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+package com.google.devtools.build.lib.bazel.rules;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.Builder;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider.RuleSet;
+import com.google.devtools.build.lib.rules.core.CoreRules;
+import com.google.devtools.build.lib.rules.objc.J2ObjcAspect;
+import com.google.devtools.build.lib.rules.objc.J2ObjcLibraryBaseRule;
+import com.google.devtools.build.lib.rules.objc.J2ObjcLibraryRule;
+
+/**
+ * Rules for supporting transpilation from Java to Objective-C in Bazel.
+ */
+public class J2ObjcRules implements RuleSet {
+  public static final J2ObjcRules INSTANCE = new J2ObjcRules();
+
+  private J2ObjcRules() {
+    // Use the static INSTANCE field instead.
+  }
+
+  @Override
+  public void init(Builder builder) {
+    String toolsRepository = checkNotNull(builder.getToolsRepository());
+    J2ObjcAspect j2ObjcAspect = new J2ObjcAspect(toolsRepository);
+
+    builder.addNativeAspectClass(j2ObjcAspect);
+    builder.addRuleDefinition(new J2ObjcLibraryBaseRule());
+    builder.addRuleDefinition(new J2ObjcLibraryRule(j2ObjcAspect));
+  }
+
+  @Override
+  public ImmutableList<RuleSet> requires() {
+    return ImmutableList.of(CoreRules.INSTANCE, CcRules.INSTANCE, JavaRules.INSTANCE,
+              ObjcRules.INSTANCE);
+  }
+}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
index 3f1629e..fc587e0 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AbstractAttributeMapper.java
@@ -52,6 +52,11 @@
     return ruleLabel;
   }
 
+  @Override
+  public String getRuleClassName() {
+    return ruleClass.getName();
+  }
+
   @Nullable
   @Override
   public <T> T get(String attributeName, Type<T> type) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
index a43fd86..7d650bc 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AggregatingAttributeMapper.java
@@ -488,6 +488,11 @@
       }
 
       @Override
+      public String getRuleClassName() {
+        return owner.getRuleClassName();
+      }
+
+      @Override
       public Iterable<String> getAttributeNames() {
         return ImmutableList.<String>builder()
             .addAll(directMap.keySet())
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java b/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java
index d00c6db..b8a28ce 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AttributeMap.java
@@ -40,6 +40,11 @@
   Label getLabel();
 
   /**
+   * Returns the name of the rule class.
+   */
+  String getRuleClassName();
+
+  /**
    * Returns true if an attribute with the given name exists.
    */
   boolean has(String attrName);
diff --git a/src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java b/src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java
index 37163fb..28f29bc 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/DelegatingAttributeMapper.java
@@ -42,6 +42,11 @@
   }
 
   @Override
+  public String getRuleClassName() {
+    return delegate.getRuleClassName();
+  }
+
+  @Override
   public <T> T get(String attributeName, Type<T> type) {
     return delegate.get(attributeName, type);
   }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java
index 502a048..222c198 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProviderTest.java
@@ -141,7 +141,7 @@
 
   @Test
   public void j2objcConsistency() {
-    checkModule(BazelRuleClassProvider.J2OBJC_RULES);
+    checkModule(J2ObjcRules.INSTANCE);
   }
 
   @Test