Give helpful information if the user encounters action conflicts from a single target.

PiperOrigin-RevId: 421073213
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index deb0d1a..c2938be 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -1118,7 +1118,10 @@
     } catch (MissingDepException e) {
       Preconditions.checkState(env.valuesMissing(), e.getMessage());
       return null;
-    } catch (ActionConflictException | InvalidExecGroupException e) {
+    } catch (ActionConflictException e) {
+      e.reportTo(env.getListener());
+      throw new ConfiguredValueCreationException(ctgValue, e.getMessage());
+    } catch (InvalidExecGroupException e) {
       throw new ConfiguredValueCreationException(ctgValue, e.getMessage());
     }
 
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
index 7c4be7b..c749089 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/AnalysisCachingTest.java
@@ -369,6 +369,23 @@
   }
 
   @Test
+  public void actionConflictFromSameTarget() throws Exception {
+    scratch.file(
+        "conflict/conflict.bzl",
+        "def _conflict(ctx):",
+        "    file = ctx.actions.declare_file('single_file')",
+        "    ctx.actions.write(output = file, content = 'a')",
+        "    ctx.actions.write(output = file, content = 'b')",
+        "    return [DefaultInfo(files = depset([file]))]",
+        "my_rule = rule(implementation = _conflict)");
+    scratch.file(
+        "conflict/BUILD", "load(':conflict.bzl', 'my_rule')", "my_rule(name = 'conflict')");
+    reporter.removeHandler(failFastHandler);
+    assertThrows(ViewCreationFailedException.class, () -> update("//conflict"));
+    assertContainsEvent("file 'conflict/single_file' is generated by these conflicting actions:");
+  }
+
+  @Test
   public void actionConflictWithDependentRule() throws IOException {
     scratch.file(
         "conflict/conflict.bzl",