Simplify RuleClass.Builder#cfg, Attribute.Builder#cfg interfaces.

PiperOrigin-RevId: 198427902
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index 038f2a7..b22a3d6 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -31,6 +31,7 @@
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
 import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.NoTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.events.EventHandler;
@@ -603,22 +604,15 @@
     }
 
     /**
-     * Defines the configuration transition for this attribute. Defaults to
-     * {@code NONE}.
-     */
-    public Builder<TYPE> cfg(SplitTransition configTransition) {
-      return cfg(new BasicSplitTransitionProvider(Preconditions.checkNotNull(configTransition)));
-    }
-
-    /**
-     * Defines the configuration transition for this attribute. Defaults to
-     * {@code NONE}.
+     * Defines the configuration transition for this attribute (e.g. a {@link PatchTransition} or
+     * {@link SplitTransition}). Defaults to {@code NONE}.
      */
     public Builder<TYPE> cfg(ConfigurationTransition configTransition) {
+      Preconditions.checkNotNull(configTransition);
       Preconditions.checkState(this.configTransition == NoTransition.INSTANCE,
           "the configuration transition is already set");
       if (configTransition instanceof SplitTransition) {
-        return cfg((SplitTransition) configTransition);
+        return cfg(new BasicSplitTransitionProvider((SplitTransition) configTransition));
       } else {
         this.configTransition = configTransition;
         return this;
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 0389764..0abecd2 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
@@ -32,6 +32,7 @@
 import com.google.common.collect.Ordering;
 import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
 import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
@@ -895,23 +896,21 @@
     /**
      * Applies the given transition to all incoming edges for this rule class.
      *
+     * <p>This cannot be a {@link SplitTransition} because that requires coordination with the
+     * rule's parent: use {@link Attribute.Builder#cfg(ConfigurationTransition)} on the parent to
+     * declare splits.
+     *
      * <p>If you need the transition to depend on the rule it's being applied to, use
      * {@link #cfg(RuleTransitionFactory)}.
      */
     public Builder cfg(PatchTransition transition) {
-      Preconditions.checkState(type != RuleClassType.ABSTRACT,
-          "Setting not inherited property (cfg) of abstract rule class '%s'", name);
-      Preconditions.checkState(this.transitionFactory == null,
-          "Property cfg has already been set");
-      Preconditions.checkNotNull(transition);
-      this.transitionFactory = new FixedTransitionFactory(transition);
-      return this;
+      return cfg(new FixedTransitionFactory(transition));
     }
 
     /**
      * Applies the given transition factory to all incoming edges for this rule class.
      *
-     * <p>Unlike{@link #cfg(ConfigurationTransition)}, the factory can examine the rule when
+     * <p>Unlike{@link #cfg(PatchTransition)}, the factory can examine the rule when
      * deciding what transition to use.
      */
     public Builder cfg(RuleTransitionFactory transitionFactory) {