Add `OptionsProvider` to `DiffAwareness.Factory#maybeCreate()` to allow options to configure creating `DiffAwareness` instances.

RELNOTES: None.
PiperOrigin-RevId: 648844781
Change-Id: Ib1cbd42dc1af56e15f33f84e522ebc6f8f76309e
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java
index 95e2f8c..b20a800 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwareness.java
@@ -43,7 +43,8 @@
      * per package path entry using one of the factories that returns a non-null value.
      */
     @Nullable
-    DiffAwareness maybeCreate(Root pathEntry, ImmutableSet<Path> ignoredPaths);
+    DiffAwareness maybeCreate(
+        Root pathEntry, ImmutableSet<Path> ignoredPaths, OptionsProvider optionsProvider);
   }
 
   /** Opaque view of the filesystem under a package path entry at a specific point in time. */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java
index 3f09081..9ba426d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManager.java
@@ -107,7 +107,8 @@
       ImmutableSet<Path> ignoredPaths,
       OptionsProvider options)
       throws InterruptedException {
-    DiffAwarenessState diffAwarenessState = maybeGetDiffAwarenessState(pathEntry, ignoredPaths);
+    DiffAwarenessState diffAwarenessState =
+        maybeGetDiffAwarenessState(pathEntry, ignoredPaths, options);
     if (diffAwarenessState == null) {
       return BrokenProcessableModifiedFileSet.INSTANCE;
     }
@@ -160,7 +161,7 @@
    */
   @Nullable
   private DiffAwarenessState maybeGetDiffAwarenessState(
-      Root pathEntry, ImmutableSet<Path> ignoredPaths) {
+      Root pathEntry, ImmutableSet<Path> ignoredPaths, OptionsProvider options) {
     StateKey stateKey = StateKey.create(pathEntry, ignoredPaths);
     DiffAwarenessState diffAwarenessState = currentDiffAwarenessStates.get(stateKey);
     if (diffAwarenessState != null) {
@@ -168,7 +169,7 @@
     }
 
     for (DiffAwareness.Factory factory : diffAwarenessFactories) {
-      DiffAwareness newDiffAwareness = factory.maybeCreate(pathEntry, ignoredPaths);
+      DiffAwareness newDiffAwareness = factory.maybeCreate(pathEntry, ignoredPaths, options);
       if (newDiffAwareness != null) {
         logger.atInfo().log(
             "Using %s DiffAwareness strategy for %s", newDiffAwareness.name(), pathEntry);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java b/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java
index 9a9502a..630329f 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/LocalDiffAwareness.java
@@ -27,6 +27,7 @@
 import com.google.devtools.common.options.OptionDocumentationCategory;
 import com.google.devtools.common.options.OptionEffectTag;
 import com.google.devtools.common.options.OptionsBase;
+import com.google.devtools.common.options.OptionsProvider;
 import java.io.IOException;
 import java.nio.file.FileSystems;
 import java.nio.file.Path;
@@ -88,7 +89,9 @@
     @Override
     @Nullable
     public DiffAwareness maybeCreate(
-        Root pathEntry, ImmutableSet<com.google.devtools.build.lib.vfs.Path> ignoredPaths) {
+        Root pathEntry,
+        ImmutableSet<com.google.devtools.build.lib.vfs.Path> ignoredPaths,
+        OptionsProvider optionsProvider) {
       com.google.devtools.build.lib.vfs.Path resolvedPathEntry;
       try {
         resolvedPathEntry = pathEntry.asPath().resolveSymbolicLinks();
diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
index 6bc1f54..fc7d118 100644
--- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
+++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java
@@ -422,7 +422,8 @@
     private class ManualDiffAwarenessFactory implements DiffAwareness.Factory {
       @Nullable
       @Override
-      public DiffAwareness maybeCreate(Root pathEntry, ImmutableSet<Path> ignoredPaths) {
+      public DiffAwareness maybeCreate(
+          Root pathEntry, ImmutableSet<Path> ignoredPaths, OptionsProvider optionsProvider) {
         return pathEntry.asPath().equals(workspace) ? new ManualDiffAwareness() : null;
       }
     }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManagerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManagerTest.java
index b0ab299..095d9ec 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManagerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/DiffAwarenessManagerTest.java
@@ -217,12 +217,14 @@
 
     ModifiedFileSet diff1 = modifiedFileSet("/path/ignored-path-2/foo");
     DiffAwareness diffAwareness1 = new DiffAwarenessStub(ImmutableList.of(diff1));
-    when(factory.maybeCreate(pathEntry, ImmutableSet.of(fs.getPath("/path/ignored-path-1"))))
+    when(factory.maybeCreate(
+            pathEntry, ImmutableSet.of(fs.getPath("/path/ignored-path-1")), OptionsProvider.EMPTY))
         .thenReturn(diffAwareness1);
 
     ModifiedFileSet diff2 = modifiedFileSet("/path/ignored-path-1/foo");
     DiffAwareness diffAwareness2 = new DiffAwarenessStub(ImmutableList.of(diff2));
-    when(factory.maybeCreate(pathEntry, ImmutableSet.of(fs.getPath("/path/ignored-path-2"))))
+    when(factory.maybeCreate(
+            pathEntry, ImmutableSet.of(fs.getPath("/path/ignored-path-2")), OptionsProvider.EMPTY))
         .thenReturn(diffAwareness2);
 
     DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory));
@@ -265,7 +267,8 @@
     DiffAwareness diffAwareness = mock(DiffAwareness.class);
     when(diffAwareness.getCurrentView(any())).thenReturn(createView(workspaceInfo));
     DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class);
-    when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness);
+    when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY))
+        .thenReturn(diffAwareness);
     DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory));
 
     ProcessableModifiedFileSet diff =
@@ -286,7 +289,8 @@
     when(diffAwareness.getDiff(view1, view2))
         .thenReturn(ModifiedFileSet.builder().modify(PathFragment.create("file")).build());
     DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class);
-    when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness);
+    when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY))
+        .thenReturn(diffAwareness);
     DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory));
     var unused =
         manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY);
@@ -308,7 +312,8 @@
     when(diffAwareness.getCurrentView(any())).thenReturn(view1, view2);
     when(diffAwareness.getDiff(view1, view2)).thenReturn(ModifiedFileSet.NOTHING_MODIFIED);
     DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class);
-    when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness);
+    when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY))
+        .thenReturn(diffAwareness);
     DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory));
     var unused =
         manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY);
@@ -330,7 +335,8 @@
     when(diffAwareness.getDiff(view1, view2))
         .thenReturn(ModifiedFileSet.builder().modify(PathFragment.create("file")).build());
     DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class);
-    when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness);
+    when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY))
+        .thenReturn(diffAwareness);
     DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory));
     var unused =
         manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY);
@@ -352,7 +358,8 @@
     when(diffAwareness.getCurrentView(any())).thenReturn(view1, view2);
     when(diffAwareness.getDiff(view1, view2)).thenThrow(BrokenDiffAwarenessException.class);
     DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class);
-    when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness);
+    when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY))
+        .thenReturn(diffAwareness);
     DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory));
     var unused =
         manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY);
@@ -372,7 +379,8 @@
     when(diffAwareness.getCurrentView(any())).thenReturn(view1, view2);
     when(diffAwareness.getDiff(view1, view2)).thenThrow(IncompatibleViewException.class);
     DiffAwareness.Factory factory = mock(DiffAwareness.Factory.class);
-    when(factory.maybeCreate(pathEntry, ImmutableSet.of())).thenReturn(diffAwareness);
+    when(factory.maybeCreate(pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY))
+        .thenReturn(diffAwareness);
     DiffAwarenessManager manager = new DiffAwarenessManager(ImmutableList.of(factory));
     var unused =
         manager.getDiff(events.reporter(), pathEntry, ImmutableSet.of(), OptionsProvider.EMPTY);
@@ -408,7 +416,8 @@
 
     @Override
     @Nullable
-    public DiffAwareness maybeCreate(Root pathEntry, ImmutableSet<Path> ignoredPaths) {
+    public DiffAwareness maybeCreate(
+        Root pathEntry, ImmutableSet<Path> ignoredPaths, OptionsProvider optionsProvider) {
       return diffAwarenesses.get(pathEntry);
     }
   }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/LocalDiffAwarenessTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/LocalDiffAwarenessTest.java
index 551f8d6..729fa57 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/LocalDiffAwarenessTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/LocalDiffAwarenessTest.java
@@ -69,14 +69,18 @@
     testCaseRoot.createDirectoryAndParents();
     testCaseIgnoredDir = testCaseRoot.getChild("ignored-dir");
     testCaseIgnoredDir.createDirectoryAndParents();
-    localDiff =
-        (LocalDiffAwareness)
-            factory.maybeCreate(Root.fromPath(testCaseRoot), ImmutableSet.of(testCaseIgnoredDir));
 
     LocalDiffAwareness.Options localDiffOptions = new LocalDiffAwareness.Options();
     localDiffOptions.watchFS = true;
     watchFsEnabledProvider = FakeOptions.of(localDiffOptions);
 
+    localDiff =
+        (LocalDiffAwareness)
+            factory.maybeCreate(
+                Root.fromPath(testCaseRoot),
+                ImmutableSet.of(testCaseIgnoredDir),
+                watchFsEnabledProvider);
+
     // Ignore test failures when run on a Mac.
     //
     // On a Mac, LocalDiffAwareness.Factory#maybeCreate will produce a MacOSXFsEventsDiffAwareness.
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
index 4ae993e0..0ce35b4 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
@@ -455,7 +455,7 @@
   }
 
   private static DiffAwareness.Factory nothingChangedDiffAwarenessFactory() {
-    return (pathEntry, ignoredPaths) ->
+    return (pathEntry, ignoredPaths, optionsProvider) ->
         new DiffAwareness() {
           @Override
           public View getCurrentView(OptionsProvider options) {