diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunction.java index b575026f8d7032..20172841025a49 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileFunction.java @@ -90,12 +90,7 @@ public static BazelLockFileValue getLockfileValue( Matcher matcher = LOCKFILE_VERSION_PATTERN.matcher(json); int version = matcher.find() ? Integer.parseInt(matcher.group(1)) : -1; if (version == BazelLockFileValue.LOCK_FILE_VERSION) { - return GsonTypeAdapterUtil.createLockFileGson( - lockfilePath - .asPath() - .getParentDirectory() - .getRelative(LabelConstants.MODULE_DOT_BAZEL_FILE_NAME)) - .fromJson(json, BazelLockFileValue.class); + return GsonTypeAdapterUtil.LOCKFILE_GSON.fromJson(json, BazelLockFileValue.class); } else { // This is an old version, its information can't be used. if (lockfileMode == LockfileMode.ERROR) { diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java index b455189d37b076..1f03ae84de249f 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BazelLockFileModule.java @@ -253,13 +253,7 @@ private static void updateLockfile(Path workspaceRoot, BazelLockFileValue update FileSystemUtils.writeContent( lockfilePath.asPath(), UTF_8, - GsonTypeAdapterUtil.createLockFileGson( - lockfilePath - .asPath() - .getParentDirectory() - .getRelative(LabelConstants.MODULE_DOT_BAZEL_FILE_NAME)) - .toJson(updatedLockfile) - + "\n"); + GsonTypeAdapterUtil.LOCKFILE_GSON.toJson(updatedLockfile) + "\n"); } catch (IOException e) { logger.atSevere().withCause(e).log( "Error while updating MODULE.bazel.lock file: %s", e.getMessage()); diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/GsonTypeAdapterUtil.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/GsonTypeAdapterUtil.java index c1d7f9e7cd5f13..22ef1bac661ec2 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/GsonTypeAdapterUtil.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/GsonTypeAdapterUtil.java @@ -20,7 +20,6 @@ import static com.google.devtools.build.lib.bazel.bzlmod.DelegateTypeAdapterFactory.IMMUTABLE_MAP; import static com.google.devtools.build.lib.bazel.bzlmod.DelegateTypeAdapterFactory.IMMUTABLE_SET; -import com.google.auto.value.AutoValue; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; import com.google.common.collect.ImmutableTable; @@ -32,7 +31,6 @@ import com.google.devtools.build.lib.cmdline.LabelSyntaxException; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.rules.repository.RepoRecordedInput; -import com.google.devtools.build.lib.vfs.Path; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonParseException; @@ -49,7 +47,6 @@ import java.util.Base64; import java.util.Optional; import javax.annotation.Nullable; -import net.starlark.java.syntax.Location; /** * Utility class to hold type adapters and helper methods to get gson registered with type adapters @@ -366,82 +363,6 @@ public ImmutableTable read(JsonReader jsonReader) } }; - /** - * A variant of {@link Location} that converts the absolute path to the root module file to a - * constant and back. - */ - // protected only for @AutoValue - @GenerateTypeAdapter - @AutoValue - protected abstract static class RootModuleFileEscapingLocation { - // This marker string is neither a valid absolute path nor a valid URL and thus cannot conflict - // with any real module file location. - private static final String ROOT_MODULE_FILE_LABEL = "@@//:MODULE.bazel"; - - public abstract String file(); - - public abstract int line(); - - public abstract int column(); - - public Location toLocation(String moduleFilePath) { - String file; - if (file().equals(ROOT_MODULE_FILE_LABEL)) { - file = moduleFilePath; - } else { - file = file(); - } - return Location.fromFileLineColumn(file, line(), column()); - } - - public static RootModuleFileEscapingLocation fromLocation( - Location location, String moduleFilePath) { - String file; - if (location.file().equals(moduleFilePath)) { - file = ROOT_MODULE_FILE_LABEL; - } else { - file = location.file(); - } - return new AutoValue_GsonTypeAdapterUtil_RootModuleFileEscapingLocation( - file, location.line(), location.column()); - } - } - - private static final class LocationTypeAdapterFactory implements TypeAdapterFactory { - - private final String moduleFilePath; - - public LocationTypeAdapterFactory(Path moduleFilePath) { - this.moduleFilePath = moduleFilePath.getPathString(); - } - - @Nullable - @Override - @SuppressWarnings("unchecked") - public TypeAdapter create(Gson gson, TypeToken typeToken) { - if (typeToken.getRawType() != Location.class) { - return null; - } - TypeAdapter relativizedLocationTypeAdapter = - gson.getAdapter(RootModuleFileEscapingLocation.class); - return (TypeAdapter) - new TypeAdapter() { - - @Override - public void write(JsonWriter jsonWriter, Location location) throws IOException { - relativizedLocationTypeAdapter.write( - jsonWriter, - RootModuleFileEscapingLocation.fromLocation(location, moduleFilePath)); - } - - @Override - public Location read(JsonReader jsonReader) throws IOException { - return relativizedLocationTypeAdapter.read(jsonReader).toLocation(moduleFilePath); - } - }; - } - } - private static final TypeAdapter REPO_RECORDED_INPUT_FILE_TYPE_ADAPTER = new TypeAdapter<>() { @Override @@ -522,17 +443,13 @@ public Optional read(JsonReader jsonReader) throws IOException { } } - public static Gson createLockFileGson(Path moduleFilePath) { - return newGsonBuilder() - .setPrettyPrinting() - .registerTypeAdapterFactory(new LocationTypeAdapterFactory(moduleFilePath)) - .registerTypeAdapterFactory(new OptionalChecksumTypeAdapterFactory()) - .create(); - } + public static final Gson LOCKFILE_GSON = + newGsonBuilder() + .setPrettyPrinting() + .registerTypeAdapterFactory(new OptionalChecksumTypeAdapterFactory()) + .create(); - public static Gson createSingleExtensionUsagesValueHashGson() { - return newGsonBuilder().create(); - } + public static final Gson SINGLE_EXTENSION_USAGES_VALUE_GSON = newGsonBuilder().create(); private static GsonBuilder newGsonBuilder() { return new GsonBuilder() diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java index 40676783feca42..00c4bc52124e85 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/SingleExtensionEvalFunction.java @@ -225,8 +225,7 @@ public SkyValue compute(SkyKey skyKey, Environment env) .setBzlTransitiveDigest(extension.getBzlTransitiveDigest()) .setUsagesDigest( SingleExtensionUsagesValue.hashForEvaluation( - GsonTypeAdapterUtil.createSingleExtensionUsagesValueHashGson(), - usagesValue)) + GsonTypeAdapterUtil.SINGLE_EXTENSION_USAGES_VALUE_GSON, usagesValue)) .setRecordedFileInputs(moduleExtensionResult.getRecordedFileInputs()) .setRecordedDirentsInputs(moduleExtensionResult.getRecordedDirentsInputs()) .setEnvVariables(extension.getEnvVars()) @@ -282,7 +281,7 @@ private SingleExtensionValue tryGettingValueFromLockFile( // relevant for the evaluation of the extension. if (!Arrays.equals( SingleExtensionUsagesValue.hashForEvaluation( - GsonTypeAdapterUtil.createSingleExtensionUsagesValueHashGson(), usagesValue), + GsonTypeAdapterUtil.SINGLE_EXTENSION_USAGES_VALUE_GSON, usagesValue), lockedExtension.getUsagesDigest())) { diffRecorder.record("The usages of the extension '" + extensionId + "' have changed"); } diff --git a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/FakeRegistry.java b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/FakeRegistry.java index 68cde584260f63..4e41b66034aea5 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/FakeRegistry.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/bzlmod/FakeRegistry.java @@ -89,7 +89,7 @@ public RepoSpec getRepoSpec(ModuleKey key, ExtendedEventHandler eventHandler) { "%s/modules/%s/%s/source.json" .formatted(url, key.getName(), key.getVersion().toString()), Optional.of( - GsonTypeAdapterUtil.createSingleExtensionUsagesValueHashGson() + GsonTypeAdapterUtil.SINGLE_EXTENSION_USAGES_VALUE_GSON .toJson(repoSpec) .getBytes(UTF_8)))); return repoSpec;