From 01e0f4387ded55ba60ef45beca75ec43f6e957be Mon Sep 17 00:00:00 2001 From: wyv Date: Tue, 9 Mar 2021 09:41:35 -0800 Subject: [PATCH] Merge RepositoryValue into RepositoryDirectoryValue RV is a simple wrapper around RDV. RV is returned by RepositoryLoaderFunction, whereas RDV is returned by RepositoryDelegatorFunction. As expected, RLF simply calls RDF and does nothing else. So we can just remove RV+RLF and replace any usages with RDV+RDF. Note that this didn't always use to be the case; the comment in RLF.java indicates that this split was done to prevent SkyFunctions restarts causing repos to be fetched multiple times. This was at one point possible (see [this revision](https://cs.opensource.google/bazel/bazel/+/master:src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java;l=55;drc=63c60a0c0f7806e7909e1c4242263fc49fe585d5) for example). As a next step, we could maybe rename RepositoryDelegatorFunction to RepositoryLoaderFunction, and RepositoryDirectoryValue to RepositoryValue; the latter pair of names is arguably better. PiperOrigin-RevId: 361830387 --- .../com/google/devtools/build/lib/bazel/BUILD | 1 - .../lib/bazel/BazelRepositoryModule.java | 2 - .../com/google/devtools/build/lib/rules/BUILD | 17 -- .../repository/RepositoryDirectoryValue.java | 3 +- .../repository/RepositoryLoaderFunction.java | 63 -------- .../google/devtools/build/lib/skyframe/BUILD | 21 +-- .../lib/skyframe/PackageLookupFunction.java | 7 +- .../lib/skyframe/PackageLookupValue.java | 9 +- .../build/lib/skyframe/RepositoryValue.java | 151 ------------------ .../build/lib/skyframe/SkyFunctions.java | 1 - .../skyframe/StarlarkModuleCycleReporter.java | 74 ++++----- .../build/lib/skyframe/packages/BUILD | 1 - .../skyframe/packages/BazelPackageLoader.java | 2 - .../build/lib/analysis/util/AnalysisMock.java | 3 - .../devtools/build/lib/analysis/util/BUILD | 1 - .../build/lib/bazel/repository/starlark/BUILD | 2 - .../StarlarkRepositoryIntegrationTest.java | 36 +++-- .../devtools/build/lib/rules/repository/BUILD | 1 - .../repository/RepositoryDelegatorTest.java | 1 - .../google/devtools/build/lib/skyframe/BUILD | 1 - .../ContainingPackageLookupFunctionTest.java | 2 - .../skyframe/PackageLookupFunctionTest.java | 2 - 22 files changed, 63 insertions(+), 338 deletions(-) delete mode 100644 src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java delete mode 100644 src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/BUILD index 47bba85fd56027..4cd99a618aaf73 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BUILD +++ b/src/main/java/com/google/devtools/build/lib/bazel/BUILD @@ -39,7 +39,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/rules:repository/new_local_repository_function", "//src/main/java/com/google/devtools/build/lib/rules:repository/new_local_repository_rule", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function", - "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_loader_function", "//src/main/java/com/google/devtools/build/lib/skyframe:mutable_supplier", "//src/main/java/com/google/devtools/build/lib/skyframe:precomputed_value", "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions", diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java index 6b93d536ae1d1c..2c061ec68978ea 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java @@ -55,7 +55,6 @@ import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryDirtinessChecker; import com.google.devtools.build.lib.rules.repository.RepositoryFunction; -import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction; import com.google.devtools.build.lib.runtime.BlazeModule; import com.google.devtools.build.lib.runtime.BlazeRuntime; import com.google.devtools.build.lib.runtime.Command; @@ -193,7 +192,6 @@ public void workspaceInit( directories.getWorkspace(), managedDirectoriesKnowledge); builder.addCustomDirtinessChecker(customDirtinessChecker); // Create the repository function everything flows through. - builder.addSkyFunction(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction()); RepositoryDelegatorFunction repositoryDelegatorFunction = new RepositoryDelegatorFunction( repositoryHandlers, diff --git a/src/main/java/com/google/devtools/build/lib/rules/BUILD b/src/main/java/com/google/devtools/build/lib/rules/BUILD index 6297887292bcb2..7d93967e20b751 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/BUILD +++ b/src/main/java/com/google/devtools/build/lib/rules/BUILD @@ -40,7 +40,6 @@ java_library( ":repository/new_repository_file_handler", ":repository/repository_directory_value", ":repository/repository_function", - ":repository/repository_loader_function", ":repository/resolved_file_value", ":repository/resolved_hashes_value", ":repository/workspace_attribute_mapper", @@ -444,22 +443,6 @@ java_library( ], ) -java_library( - name = "repository/repository_loader_function", - srcs = ["repository/RepositoryLoaderFunction.java"], - deps = [ - ":repository/repository_directory_value", - ":repository/workspace_file_helper", - "//src/main/java/com/google/devtools/build/lib/cmdline", - "//src/main/java/com/google/devtools/build/lib/packages", - "//src/main/java/com/google/devtools/build/lib/skyframe:repository_value", - "//src/main/java/com/google/devtools/build/lib/vfs", - "//src/main/java/com/google/devtools/build/skyframe", - "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", - "//third_party:jsr305", - ], -) - java_library( name = "repository/resolved_file_value", srcs = ["repository/ResolvedFileValue.java"], diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java index f7c465be3c278c..f8cc575083964e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java +++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDirectoryValue.java @@ -166,9 +166,10 @@ public static Key key(RepositoryName repository) { return Key.create(repository); } + /** The SkyKey for retrieving the local directory of an external repository. */ @AutoCodec.VisibleForSerialization @AutoCodec - static class Key extends AbstractSkyKey { + public static class Key extends AbstractSkyKey { private static final Interner interner = BlazeInterners.newWeakInterner(); private Key(RepositoryName arg) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java deleted file mode 100644 index e2ea4f19c1cb05..00000000000000 --- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryLoaderFunction.java +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2016 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.rules.repository; - -import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.skyframe.RepositoryValue; -import com.google.devtools.build.skyframe.SkyFunction; -import com.google.devtools.build.skyframe.SkyFunctionException; -import com.google.devtools.build.skyframe.SkyFunctionException.Transience; -import com.google.devtools.build.skyframe.SkyKey; -import com.google.devtools.build.skyframe.SkyValue; -import java.io.IOException; -import javax.annotation.Nullable; - -/** Creates a local or remote repository. */ -public class RepositoryLoaderFunction implements SkyFunction { - - @Nullable - @Override - public SkyValue compute(SkyKey skyKey, Environment env) - throws SkyFunctionException, InterruptedException { - // This cannot be combined with {@link RepositoryDelegatorFunction}. RDF fetches the - // repository and must not have a Skyframe restart after writing it (otherwise the repository - // would be re-downloaded). - RepositoryName nameFromRule = (RepositoryName) skyKey.argument(); - SkyKey repositoryKey = RepositoryDirectoryValue.key(nameFromRule); - RepositoryDirectoryValue repository = (RepositoryDirectoryValue) env.getValue(repositoryKey); - if (repository == null) { - return null; - } - if (!repository.repositoryExists()) { - return RepositoryValue.notFound(nameFromRule); - } - return RepositoryValue.success(nameFromRule, repository); - } - - @Nullable - @Override - public String extractTag(SkyKey skyKey) { - return null; - } - - /** An exception thrown by RepositoryLoaderFunction */ - public static class RepositoryLoaderFunctionException extends SkyFunctionException { - - /** Error reading or writing to the filesystem. */ - public RepositoryLoaderFunctionException(IOException cause, Transience transience) { - super(cause, transience); - } - } -} diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD index 7b69f04e03e031..57e669be06755a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BUILD @@ -1780,7 +1780,6 @@ java_library( ":local_repository_lookup_value", ":package_lookup_value", ":precomputed_value", - ":repository_value", "//src/main/java/com/google/devtools/build/lib/actions:file_metadata", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/cmdline:LabelValidator", @@ -1788,6 +1787,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/packages/semantics", "//src/main/java/com/google/devtools/build/lib/pkgcache", "//src/main/java/com/google/devtools/build/lib/repository:external_package_helper", + "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_directory_value", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", "//src/main/java/com/google/devtools/build/skyframe", @@ -1802,11 +1802,11 @@ java_library( name = "package_lookup_value", srcs = ["PackageLookupValue.java"], deps = [ - ":repository_value", ":sky_functions", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/concurrent", "//src/main/java/com/google/devtools/build/lib/packages", + "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_directory_value", "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", "//src/main/java/com/google/devtools/build/lib/vfs", "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment", @@ -2287,21 +2287,6 @@ java_library( ], ) -java_library( - name = "repository_value", - srcs = ["RepositoryValue.java"], - deps = [ - ":sky_functions", - "//src/main/java/com/google/devtools/build/lib/cmdline", - "//src/main/java/com/google/devtools/build/lib/concurrent", - "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_directory_value", - "//src/main/java/com/google/devtools/build/lib/skyframe/serialization/autocodec", - "//src/main/java/com/google/devtools/build/lib/vfs", - "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", - "//third_party:guava", - ], -) - java_library( name = "root_package_extractor", srcs = ["RootPackageExtractor.java"], @@ -2389,12 +2374,12 @@ java_library( deps = [ ":abstract_label_cycle_reporter", ":bzl_load_value", - ":repository_value", ":sky_functions", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/build/lib/events", "//src/main/java/com/google/devtools/build/lib/packages", "//src/main/java/com/google/devtools/build/lib/repository:request_repository_information_event", + "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_directory_value", "//src/main/java/com/google/devtools/build/skyframe", "//src/main/java/com/google/devtools/build/skyframe:skyframe-objects", "//third_party:guava", diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java index 44a4fff54368a6..a388041c02ac55 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.packages.semantics.BuildLanguageOptions; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.repository.ExternalPackageHelper; +import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.Root; import com.google.devtools.build.lib.vfs.RootedPath; @@ -326,11 +327,11 @@ private PackageLookupValue computeExternalPackageLookupValue( SkyKey skyKey, Environment env, PackageIdentifier packageIdentifier) throws PackageLookupFunctionException, InterruptedException { PackageIdentifier id = (PackageIdentifier) skyKey.argument(); - SkyKey repositoryKey = RepositoryValue.key(id.getRepository()); - RepositoryValue repositoryValue; + SkyKey repositoryKey = RepositoryDirectoryValue.key(id.getRepository()); + RepositoryDirectoryValue repositoryValue; try { repositoryValue = - (RepositoryValue) + (RepositoryDirectoryValue) env.getValueOrThrow( repositoryKey, NoSuchPackageException.class, diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java index 093352a0592570..45f99699787d27 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupValue.java @@ -19,6 +19,7 @@ import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.concurrent.BlazeInterners; import com.google.devtools.build.lib.packages.BuildFileName; +import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.Root; @@ -68,7 +69,7 @@ enum ErrorReason { protected PackageLookupValue() {} public static PackageLookupValue success( - RepositoryValue repository, Root root, BuildFileName buildFileName) { + RepositoryDirectoryValue repository, Root root, BuildFileName buildFileName) { return new SuccessfulPackageLookupValue(repository, root, buildFileName); } @@ -162,20 +163,20 @@ public static class SuccessfulPackageLookupValue extends PackageLookupValue { * controlling a symbolic link the path goes trough). Can be {@code null}, if does not depend on * such a repository; will always be {@code null} for packages in the main repository. */ - @Nullable private final RepositoryValue repository; + @Nullable private final RepositoryDirectoryValue repository; private final Root root; private final BuildFileName buildFileName; SuccessfulPackageLookupValue( - @Nullable RepositoryValue repository, Root root, BuildFileName buildFileName) { + @Nullable RepositoryDirectoryValue repository, Root root, BuildFileName buildFileName) { this.repository = repository; this.root = root; this.buildFileName = buildFileName; } @Nullable - public RepositoryValue repository() { + public RepositoryDirectoryValue repository() { return repository; } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java deleted file mode 100644 index ef4cebc9ae4bd4..00000000000000 --- a/src/main/java/com/google/devtools/build/lib/skyframe/RepositoryValue.java +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright 2016 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.skyframe; - -import com.google.common.base.Objects; -import com.google.common.base.Preconditions; -import com.google.common.collect.Interner; -import com.google.devtools.build.lib.cmdline.RepositoryName; -import com.google.devtools.build.lib.concurrent.BlazeInterners; -import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; -import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; -import com.google.devtools.build.lib.vfs.Path; -import com.google.devtools.build.skyframe.AbstractSkyKey; -import com.google.devtools.build.skyframe.SkyFunctionName; -import com.google.devtools.build.skyframe.SkyValue; - -/** A repository's name and directory. */ -public abstract class RepositoryValue implements SkyValue { - public abstract boolean repositoryExists(); - - /** Returns the path to the repository. */ - public abstract Path getPath(); - - /** Successful lookup value. */ - public static final class SuccessfulRepositoryValue extends RepositoryValue { - private final RepositoryName repositoryName; - private final RepositoryDirectoryValue repositoryDirectory; - - /** Creates a repository with a given name in a certain directory. */ - public SuccessfulRepositoryValue( - RepositoryName repositoryName, RepositoryDirectoryValue repository) { - Preconditions.checkArgument(repository.repositoryExists()); - this.repositoryName = repositoryName; - this.repositoryDirectory = repository; - } - - @Override - public boolean repositoryExists() { - return true; - } - - @Override - public Path getPath() { - return repositoryDirectory.getPath(); - } - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - - SuccessfulRepositoryValue that = (SuccessfulRepositoryValue) other; - return Objects.equal(repositoryName, that.repositoryName) - && Objects.equal(repositoryDirectory, that.repositoryDirectory); - } - - @Override - public int hashCode() { - return Objects.hashCode(repositoryName, repositoryDirectory); - } - } - - /** Repository could not be resolved. */ - public static final class NoRepositoryValue extends RepositoryValue { - private final RepositoryName repositoryName; - - private NoRepositoryValue(RepositoryName repositoryName) { - this.repositoryName = repositoryName; - } - - @Override - public boolean repositoryExists() { - return false; - } - - @Override - public Path getPath() { - throw new IllegalStateException(); - } - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - if (other == null || getClass() != other.getClass()) { - return false; - } - - NoRepositoryValue that = (NoRepositoryValue) other; - return Objects.equal(repositoryName, that.repositoryName); - } - - @Override - public int hashCode() { - return repositoryName.hashCode(); - } - } - - public static RepositoryValue success( - RepositoryName repositoryName, RepositoryDirectoryValue repository) { - return new SuccessfulRepositoryValue(repositoryName, repository); - } - - public static RepositoryValue notFound(RepositoryName repositoryName) { - // TODO(ulfjack): Store the cause here? The two possible causes are that the external package - // contains errors, or that the repository with the given name does not exist. - return new NoRepositoryValue(repositoryName); - } - - public static Key key(RepositoryName repositoryName) { - return Key.create(repositoryName); - } - - @AutoCodec.VisibleForSerialization - @AutoCodec - static class Key extends AbstractSkyKey { - private static final Interner interner = BlazeInterners.newWeakInterner(); - - private Key(RepositoryName arg) { - super(arg); - } - - @AutoCodec.VisibleForSerialization - @AutoCodec.Instantiator - static Key create(RepositoryName arg) { - return interner.intern(new Key(arg)); - } - - @Override - public SkyFunctionName functionName() { - return SkyFunctions.REPOSITORY; - } - } -} diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java index 09d6261a380823..032122775e18f2 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyFunctions.java @@ -125,7 +125,6 @@ public final class SkyFunctions { public static final SkyFunctionName PLATFORM_MAPPING = SkyFunctionName.createHermetic("PLATFORM_MAPPING"); static final SkyFunctionName COVERAGE_REPORT = SkyFunctionName.createHermetic("COVERAGE_REPORT"); - public static final SkyFunctionName REPOSITORY = SkyFunctionName.createHermetic("REPOSITORY"); public static final SkyFunctionName REPOSITORY_DIRECTORY = SkyFunctionName.createNonHermetic("REPOSITORY_DIRECTORY"); public static final SkyFunctionName WORKSPACE_AST = diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkModuleCycleReporter.java b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkModuleCycleReporter.java index 1a53ebbdc55041..bcd1afb8758aa7 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkModuleCycleReporter.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/StarlarkModuleCycleReporter.java @@ -25,6 +25,7 @@ import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.WorkspaceFileValue; import com.google.devtools.build.lib.repository.RequestRepositoryInformationEvent; +import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; import com.google.devtools.build.skyframe.CycleInfo; import com.google.devtools.build.skyframe.CyclesReporter; import com.google.devtools.build.skyframe.SkyKey; @@ -44,28 +45,19 @@ public class StarlarkModuleCycleReporter implements CyclesReporter.SingleCycleRe private static final Predicate IS_WORKSPACE_FILE = SkyFunctions.isSkyFunction(WorkspaceFileValue.WORKSPACE_FILE); - private static final Predicate IS_REPOSITORY = - SkyFunctions.isSkyFunction(SkyFunctions.REPOSITORY); - private static final Predicate IS_REPOSITORY_DIRECTORY = SkyFunctions.isSkyFunction(SkyFunctions.REPOSITORY_DIRECTORY); private static final Predicate IS_BZL_LOAD = SkyFunctions.isSkyFunction(SkyFunctions.BZL_LOAD); - private static final Predicate IS_EXTERNAL_PACKAGE = - SkyFunctions.isSkyFunction(SkyFunctions.EXTERNAL_PACKAGE); - - private static final Predicate IS_LOCAL_REPOSITORY_LOOKUP = - SkyFunctions.isSkyFunction(SkyFunctions.LOCAL_REPOSITORY_LOOKUP); - private static void requestRepoDefinitions( ExtendedEventHandler eventHandler, Iterable repos) { for (SkyKey repo : repos) { - if (repo instanceof RepositoryValue.Key) { + if (repo instanceof RepositoryDirectoryValue.Key) { eventHandler.post( new RequestRepositoryInformationEvent( - ((RepositoryValue.Key) repo).argument().strippedName())); + ((RepositoryDirectoryValue.Key) repo).argument().strippedName())); } } } @@ -92,21 +84,18 @@ public boolean maybeReportCycle( || IS_WORKSPACE_FILE.apply(lastPathElement))) { Function printer = - new Function() { - @Override - public String apply(SkyKey input) { - if (input.argument() instanceof BzlLoadValue.Key) { - return ((BzlLoadValue.Key) input.argument()).getLabel().toString(); - } else if (input.argument() instanceof PackageIdentifier) { - return ((PackageIdentifier) input.argument()) + "/BUILD"; - } else if (input.argument() instanceof WorkspaceFileValue.WorkspaceFileKey) { - return ((WorkspaceFileValue.WorkspaceFileKey) input.argument()) - .getPath() - .getRootRelativePath() - .toString(); - } else { - throw new UnsupportedOperationException(); - } + input -> { + if (input.argument() instanceof BzlLoadValue.Key) { + return ((BzlLoadValue.Key) input.argument()).getLabel().toString(); + } else if (input.argument() instanceof PackageIdentifier) { + return ((PackageIdentifier) input.argument()) + "/BUILD"; + } else if (input.argument() instanceof WorkspaceFileValue.WorkspaceFileKey) { + return ((WorkspaceFileValue.WorkspaceFileKey) input.argument()) + .getPath() + .getRootRelativePath() + .toString(); + } else { + throw new UnsupportedOperationException(); } }; @@ -130,20 +119,16 @@ public String apply(SkyKey input) { // BUILD file. eventHandler.handle(Event.error(null, cycleMessage.toString())); return true; - } else if (Iterables.all( - cycle, Predicates.or(IS_PACKAGE_LOOKUP, IS_REPOSITORY, IS_REPOSITORY_DIRECTORY))) { + } else if (Iterables.all(cycle, Predicates.or(IS_PACKAGE_LOOKUP, IS_REPOSITORY_DIRECTORY))) { StringBuilder cycleMessage = new StringBuilder().append("Circular definition of repositories:"); - Iterable repos = Iterables.filter(cycle, IS_REPOSITORY); + Iterable repos = Iterables.filter(cycle, IS_REPOSITORY_DIRECTORY); Function printer = - new Function() { - @Override - public String apply(SkyKey input) { - if (input instanceof RepositoryValue.Key) { - return ((RepositoryValue.Key) input).argument().getName(); - } else { - throw new UnsupportedOperationException(); - } + input -> { + if (input instanceof RepositoryDirectoryValue.Key) { + return ((RepositoryDirectoryValue.Key) input).argument().getName(); + } else { + throw new UnsupportedOperationException(); } }; AbstractLabelCycleReporter.printCycle(ImmutableList.copyOf(repos), cycleMessage, printer); @@ -152,9 +137,10 @@ public String apply(SkyKey input) { // repositories were defined. requestRepoDefinitions(eventHandler, repos); return true; - } else if (Iterables.any(cycle, IS_REPOSITORY) && Iterables.any(cycle, IS_WORKSPACE_FILE)) { + } else if (Iterables.any(cycle, IS_REPOSITORY_DIRECTORY) + && Iterables.any(cycle, IS_WORKSPACE_FILE)) { Iterable repos = - Iterables.filter(Iterables.concat(pathToCycle, cycle), IS_REPOSITORY); + Iterables.filter(Iterables.concat(pathToCycle, cycle), IS_REPOSITORY_DIRECTORY); StringBuilder message = new StringBuilder(); @@ -170,18 +156,18 @@ public String apply(SkyKey input) { .append( "The following chain of repository dependencies lead to the missing definition.\n"); for (SkyKey repo : repos) { - if (repo instanceof RepositoryValue.Key) { + if (repo instanceof RepositoryDirectoryValue.Key) { message .append(" - ") - .append(((RepositoryValue.Key) repo).argument().getName()) + .append(((RepositoryDirectoryValue.Key) repo).argument().getName()) .append("\n"); } } SkyKey missingRepo = Iterables.getLast(repos); - if (missingRepo instanceof RepositoryValue.Key) { + if (missingRepo instanceof RepositoryDirectoryValue.Key) { message .append("This could either mean you have to add the '") - .append(((RepositoryValue.Key) missingRepo).argument().getName()) + .append(((RepositoryDirectoryValue.Key) missingRepo).argument().getName()) .append("' repository with a statement like `http_archive` in your WORKSPACE file") .append(" (note that transitive dependencies are not added automatically), or move") .append(" an existing definition earlier in your WORKSPACE file."); @@ -196,7 +182,7 @@ public String apply(SkyKey input) { ((BzlLoadValue.Key) Iterables.getLast(Iterables.filter(cycle, IS_BZL_LOAD))).getLabel(); eventHandler.handle( Event.error(null, "Failed to load Starlark extension '" + fileLabel + "'.\n")); - return true; + return true; } else if (Iterables.any(cycle, IS_PACKAGE_LOOKUP)) { PackageIdentifier pkg = (PackageIdentifier) diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD index cc25ebe96b5c77..f0acc83ff8fd59 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BUILD @@ -81,7 +81,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/packages", "//src/main/java/com/google/devtools/build/lib/repository:external_package_helper", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function", - "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_loader_function", "//src/main/java/com/google/devtools/build/lib/skyframe:action_environment_function", "//src/main/java/com/google/devtools/build/lib/skyframe:client_environment_function", "//src/main/java/com/google/devtools/build/lib/skyframe:directory_listing_function", diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java index 3e662ae0cec28e..c9b8eb1c33151b 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java @@ -27,7 +27,6 @@ import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension; import com.google.devtools.build.lib.repository.ExternalPackageHelper; import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; -import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction; import com.google.devtools.build.lib.skyframe.ActionEnvironmentFunction; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; import com.google.devtools.build.lib.skyframe.ClientEnvironmentFunction; @@ -123,7 +122,6 @@ public BazelPackageLoader buildImpl() { directories, ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES, EXTERNAL_PACKAGE_HELPER)) - .put(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction()) .build()); addExtraPrecomputedValues( PrecomputedValue.injected(PrecomputedValue.ACTION_ENV, ImmutableMap.of()), diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java index 439cf38c792d46..7b94b18d7c3475 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java @@ -31,7 +31,6 @@ import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule; import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.rules.repository.RepositoryFunction; -import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; import com.google.devtools.build.lib.skyframe.ManagedDirectoriesKnowledge; import com.google.devtools.build.lib.skyframe.SkyFunctions; @@ -129,8 +128,6 @@ public ImmutableMap getSkyFunctions(BlazeDirectori directories, ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES, BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER), - SkyFunctions.REPOSITORY, - new RepositoryLoaderFunction(), CcSkyframeFdoSupportValue.SKYFUNCTION, new CcSkyframeFdoSupportFunction(directories)); } diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD b/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD index 58e8946c860ab7..72d2e75f563f1e 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BUILD @@ -95,7 +95,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/pkgcache", "//src/main/java/com/google/devtools/build/lib/rules:repository/local_repository_rule", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function", - "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_loader_function", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/rules/java:java-compilation", "//src/main/java/com/google/devtools/build/lib/shell", diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD index f004b46dea02b7..aaab9cfbbd1c4f 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD +++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/BUILD @@ -28,7 +28,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/pkgcache", "//src/main/java/com/google/devtools/build/lib/rules:repository/local_repository_rule", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function", - "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_loader_function", "//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_and_data", "//src/main/java/com/google/devtools/build/lib/skyframe:managed_directories_knowledge", "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions", @@ -74,7 +73,6 @@ java_test( "//src/main/java/com/google/devtools/build/lib/pkgcache", "//src/main/java/com/google/devtools/build/lib/rules:repository/local_repository_rule", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function", - "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_loader_function", "//src/main/java/com/google/devtools/build/lib/skyframe:configured_target_and_data", "//src/main/java/com/google/devtools/build/lib/skyframe:managed_directories_knowledge", "//src/main/java/com/google/devtools/build/lib/skyframe:sky_functions", diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryIntegrationTest.java index 2eacdd821c822f..2f1305ba4024d2 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryIntegrationTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/starlark/StarlarkRepositoryIntegrationTest.java @@ -31,7 +31,6 @@ import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule; import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.rules.repository.RepositoryFunction; -import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData; import com.google.devtools.build.lib.skyframe.ManagedDirectoriesKnowledge; @@ -86,11 +85,7 @@ public ImmutableMap getSkyFunctions( directories, ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES, BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER); - return ImmutableMap.of( - SkyFunctions.REPOSITORY_DIRECTORY, - function, - SkyFunctions.REPOSITORY, - new RepositoryLoaderFunction()); + return ImmutableMap.of(SkyFunctions.REPOSITORY_DIRECTORY, function); } } @@ -115,7 +110,7 @@ protected ConfiguredRuleClassProvider createRuleClassProvider() { protected void invalidatePackages() throws InterruptedException { // Repository shuffling breaks access to config-needed paths like //tools/jdk:toolchain and // these tests don't do anything interesting with configurations anyway. So exempt them. - invalidatePackages(/*alsoConfigs=*/false); + invalidatePackages(/*alsoConfigs=*/ false); } @Test @@ -134,7 +129,8 @@ public void testStarlarkLocalRepository() throws Exception { " local=True,", " attrs={'path': attr.string(mandatory=True)})"); scratch.file(rootDirectory.getRelative("BUILD").getPathString()); - scratch.overwriteFile(rootDirectory.getRelative("WORKSPACE").getPathString(), + scratch.overwriteFile( + rootDirectory.getRelative("WORKSPACE").getPathString(), new ImmutableList.Builder() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("load('//:def.bzl', 'repo')") @@ -222,7 +218,8 @@ public void testStarlarkSymlinkFileFromRepository() throws Exception { " implementation=_impl,", " local=True)"); scratch.file(rootDirectory.getRelative("BUILD").getPathString()); - scratch.overwriteFile(rootDirectory.getRelative("WORKSPACE").getPathString(), + scratch.overwriteFile( + rootDirectory.getRelative("WORKSPACE").getPathString(), new ImmutableList.Builder() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name='repo2', path='/repo2')") @@ -251,7 +248,8 @@ public void testStarlarkRepositoryTemplate() throws Exception { " implementation=_impl,", " local=True)"); scratch.file(rootDirectory.getRelative("BUILD").getPathString()); - scratch.overwriteFile(rootDirectory.getRelative("WORKSPACE").getPathString(), + scratch.overwriteFile( + rootDirectory.getRelative("WORKSPACE").getPathString(), new ImmutableList.Builder() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name='repo2', path='/repo2')") @@ -281,7 +279,8 @@ public void testStarlarkRepositoryName() throws Exception { " implementation=_impl,", " local=True)"); scratch.file(rootDirectory.getRelative("BUILD").getPathString()); - scratch.overwriteFile(rootDirectory.getRelative("WORKSPACE").getPathString(), + scratch.overwriteFile( + rootDirectory.getRelative("WORKSPACE").getPathString(), new ImmutableList.Builder() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name='repo2', path='/repo2')") @@ -354,9 +353,9 @@ public void testCycleErrorWhenCallingCycleTarget() throws Exception { @Test public void testCycleErrorInWorkspaceFileWithExternalRepo() throws Exception { try (OutputStream output = scratch.resolve("WORKSPACE").getOutputStream(/* append= */ true)) { - output.write(( - "\nload('//foo:bar.bzl', 'foobar')" - + "\ngit_repository(name = 'git_repo')").getBytes(StandardCharsets.UTF_8)); + output.write( + ("\nload('//foo:bar.bzl', 'foobar')" + "\ngit_repository(name = 'git_repo')") + .getBytes(StandardCharsets.UTF_8)); } scratch.file("BUILD", ""); scratch.file("foo/BUILD", ""); @@ -384,7 +383,8 @@ public void testLoadDoesNotHideWorkspaceError() throws Exception { scratch.file("/repo2/def.bzl", "def macro():", " print('bleh')"); scratch.file("/repo2/WORKSPACE"); - scratch.overwriteFile(rootDirectory.getRelative("WORKSPACE").getPathString(), + scratch.overwriteFile( + rootDirectory.getRelative("WORKSPACE").getPathString(), new ImmutableList.Builder() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("local_repository(name='bleh')") @@ -406,7 +406,8 @@ public void testLoadDoesNotHideWorkspaceError() throws Exception { @Test public void testLoadDoesNotHideWorkspaceFunction() throws Exception { scratch.file("def.bzl", "def macro():", " print('bleh')"); - scratch.overwriteFile(rootDirectory.getRelative("WORKSPACE").getPathString(), + scratch.overwriteFile( + rootDirectory.getRelative("WORKSPACE").getPathString(), new ImmutableList.Builder() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("workspace(name='bleh')") @@ -444,7 +445,8 @@ public void testStarlarkRepositoryCannotOverrideBuiltInAttribute() throws Except @Test public void testMultipleLoadSameExtension() throws Exception { - scratch.overwriteFile(rootDirectory.getRelative("WORKSPACE").getPathString(), + scratch.overwriteFile( + rootDirectory.getRelative("WORKSPACE").getPathString(), new ImmutableList.Builder() .addAll(analysisMock.getWorkspaceContents(mockToolsConfig)) .add("load('//:def.bzl', 'f1')") diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD b/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD index d0924be001017e..071e2bb5307a99 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD +++ b/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD @@ -29,7 +29,6 @@ java_library( "//src/main/java/com/google/devtools/build/lib/rules:repository/local_repository_rule", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_directory_value", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function", - "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_loader_function", "//src/main/java/com/google/devtools/build/lib/skyframe:bzl_compile", "//src/main/java/com/google/devtools/build/lib/skyframe:containing_package_lookup_function", "//src/main/java/com/google/devtools/build/lib/skyframe:file_function", diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java index 39207d40f82b63..a845a3aeddbaae 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java @@ -185,7 +185,6 @@ public void setupDelegator() throws Exception { pkgFactory, directories, /*bzlLoadFunctionForInlining=*/ null)) - .put(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction()) .put( SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction( diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD index 2b86209be944d6..b90627de59bbf3 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD +++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD @@ -165,7 +165,6 @@ java_test( "//src/main/java/com/google/devtools/build/lib/rules:repository/local_repository_rule", "//src/main/java/com/google/devtools/build/lib/rules:repository/managed_directories_knowledge_impl", "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_function", - "//src/main/java/com/google/devtools/build/lib/rules:repository/repository_loader_function", "//src/main/java/com/google/devtools/build/lib/rules/cpp", "//src/main/java/com/google/devtools/build/lib/skyframe:action_execution_inactivity_watchdog", "//src/main/java/com/google/devtools/build/lib/skyframe:action_execution_value", diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java index a27bebbddcd01c..2db4032160d39a 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java @@ -34,7 +34,6 @@ import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule; import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.rules.repository.RepositoryFunction; -import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction; import com.google.devtools.build.lib.skyframe.ContainingPackageLookupValue.ContainingPackage; import com.google.devtools.build.lib.skyframe.ContainingPackageLookupValue.NoContainingPackage; import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; @@ -159,7 +158,6 @@ public final void setUp() throws Exception { directories, ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES, BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER)); - skyFunctions.put(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction()); differencer = new SequencedRecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java index 4893053e6718b3..36adb8f59fe287 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java @@ -38,7 +38,6 @@ import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule; import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; import com.google.devtools.build.lib.rules.repository.RepositoryFunction; -import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction; import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFileAction; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.skyframe.PackageLookupValue.ErrorReason; @@ -168,7 +167,6 @@ public final void setUp() throws Exception { directories, ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES, BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER)); - skyFunctions.put(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction()); differencer = new SequencedRecordingDifferencer(); evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer);