Automated rollback of commit 9f87aa7b352a2caea44cebd5b8cd0fc0b2a4728b.

*** Reason for rollback ***

Breaks some targets

*** Original change description ***

Fix for iterating over settings.items() in transition implementation yields invalid list values #13436 https://github.com/bazelbuild/bazel/issues/13436

PiperOrigin-RevId: 375488551
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java b/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
index 45324f3..110110f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/starlark/FunctionTransitionUtil.java
@@ -212,7 +212,7 @@
         FragmentOptions options = buildOptions.get(optionInfo.getOptionClass());
         try {
           Object optionValue = field.get(options);
-          dict.putEntry(optionKey, Starlark.fromJava(optionValue, null));
+          dict.putEntry(optionKey, optionValue == null ? Starlark.NONE : optionValue);
         } catch (IllegalAccessException e) {
           // These exceptions should not happen, but if they do, throw a RuntimeException.
           throw new RuntimeException(e);
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
index 8f3bfc5..cc89ac0 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/StarlarkAttrTransitionProviderTest.java
@@ -2141,65 +2141,4 @@
     assertThat(getConfiguration(dep).getOptions().get(PlatformOptions.class).platforms)
         .containsExactly(Label.parseAbsoluteUnchecked("//platforms:my_platform"));
   }
-
-  @Test
-  public void testIterationOverSettingsItems() throws Exception {
-    writeAllowlistFile();
-    scratch.file(
-        "test/defs.bzl",
-        "def _add_feature_x_transition_impl(settings, attrs):",
-        "  build_settings = {}",
-        "  for key, value in settings.items():",
-        "    if key == '//command_line_option:features':",
-        "      value = value + ['x']",
-        "    build_settings[key] = value",
-        "  return build_settings",
-        "add_feature_x_transition = transition(",
-        "  implementation = _add_feature_x_transition_impl,",
-        "  inputs = ['//command_line_option:features'],",
-        "  outputs = ['//command_line_option:features'],",
-        ")",
-        "def _apply_feature_x_impl(ctx):",
-        "  return cc_common.merge_cc_infos(cc_infos = [dep[CcInfo] for dep in ctx.attr.deps])",
-        "apply_feature_x = rule(",
-        "  cfg = add_feature_x_transition,",
-        "  implementation = _apply_feature_x_impl,",
-        "  attrs = {",
-        "    'deps': attr.label_list(providers=[CcInfo]),",
-        "    '_allowlist_function_transition': attr.label(",
-        "        default = '//tools/allowlists/function_transition_allowlist',",
-        "    ),",
-        "  },",
-        ")");
-    scratch.file(
-        "test/BUILD",
-        "load('//test:defs.bzl', 'apply_feature_x')",
-        "cc_library(",
-        "  name = 'lib_a',",
-        "  srcs = ['main_a.cc']",
-        ")",
-        "cc_library(",
-        "  name = 'lib_bc',",
-        "  srcs = ['main_bc.cc']",
-        ")",
-        "apply_feature_x(",
-        "  name = 'lib_a_with_feature_x',",
-        "  deps = [':lib_a']",
-        ")",
-        "apply_feature_x(",
-        "  name = 'lib_bc_with_feature_x',",
-        "  deps = [':lib_bc']",
-        ")");
-    useConfiguration("--features=a");
-    ConfiguredTarget dep = getConfiguredTarget("//test:lib_a_with_feature_x");
-    assertThat(getConfiguration(dep).getOptions().get(CoreOptions.class).defaultFeatures)
-        .containsExactly("a", "x");
-    assertNoEvents();
-
-    useConfiguration("--features=bc");
-    dep = getConfiguredTarget("//test:lib_bc_with_feature_x");
-    assertThat(getConfiguration(dep).getOptions().get(CoreOptions.class).defaultFeatures)
-        .containsExactly("bc", "x");
-    assertNoEvents();
-  }
 }