From 22fe29e8aa09fd1a77831639e4777011c5d10053 Mon Sep 17 00:00:00 2001 From: Googler Date: Mon, 23 Oct 2023 10:11:45 -0700 Subject: [PATCH] Split `ArtifactTracker` interface into `ArtifactTracker` and `RenderJarArtifactTracker` interfaces. Even though their implementations can share a common infrastructure they do not need to share it. These interfaces are used by different callers and thus making them separate makes it easier to understand the intended usage of each method. 1. Do not rename `ArtifactTracker` to `DependencyArtifactTracker` to avoid too much noise in this change. 2. Do not split the implementation yet. A few more changes are needed before it can happen. PiperOrigin-RevId: 575854279 --- .../RenderJarClassFileFinder.java | 8 ++-- .../model/idea/BlazeClassJarProvider.java | 7 +++- .../blaze/base/qsync/ArtifactTracker.java | 27 +----------- .../qsync/ArtifactTrackerUpdateResult.java | 41 +++++++++++++++++++ .../idea/blaze/base/qsync/ProjectLoader.java | 1 + .../blaze/base/qsync/QuerySyncManager.java | 5 +++ .../blaze/base/qsync/QuerySyncProject.java | 7 ++++ .../base/qsync/RenderJarArtifactTracker.java | 34 +++++++++++++++ .../base/qsync/RenderJarTrackerImpl.java | 10 ++--- .../base/qsync/cache/ArtifactTrackerImpl.java | 14 ++++--- .../qsync/cache/ArtifactTrackerImplTest.java | 10 ++--- 11 files changed, 117 insertions(+), 47 deletions(-) create mode 100644 base/src/com/google/idea/blaze/base/qsync/ArtifactTrackerUpdateResult.java create mode 100644 base/src/com/google/idea/blaze/base/qsync/RenderJarArtifactTracker.java diff --git a/aswb/src/com/google/idea/blaze/android/projectsystem/RenderJarClassFileFinder.java b/aswb/src/com/google/idea/blaze/android/projectsystem/RenderJarClassFileFinder.java index 2f582036eaa..b58fca0edbc 100644 --- a/aswb/src/com/google/idea/blaze/android/projectsystem/RenderJarClassFileFinder.java +++ b/aswb/src/com/google/idea/blaze/android/projectsystem/RenderJarClassFileFinder.java @@ -30,9 +30,9 @@ import com.google.idea.blaze.base.ideinfo.TargetKey; import com.google.idea.blaze.base.io.VirtualFileSystemProvider; import com.google.idea.blaze.base.model.BlazeProjectData; -import com.google.idea.blaze.base.qsync.ArtifactTracker; import com.google.idea.blaze.base.qsync.QuerySync; import com.google.idea.blaze.base.qsync.QuerySyncManager; +import com.google.idea.blaze.base.qsync.RenderJarArtifactTracker; import com.google.idea.blaze.base.settings.Blaze; import com.google.idea.blaze.base.settings.BlazeImportSettings.ProjectType; import com.google.idea.blaze.base.sync.BlazeSyncModificationTracker; @@ -143,12 +143,12 @@ public VirtualFile findClass(String fqcn) { if (Blaze.getProjectType(project).equals(ProjectType.QUERY_SYNC)) { if (QuerySync.isComposeEnabled()) { - ArtifactTracker artifactTracker = - QuerySyncManager.getInstance(project).getArtifactTracker(); + RenderJarArtifactTracker renderJarArtifactTracker = + QuerySyncManager.getInstance(project).getRenderJarArtifactTracker(); // TODO(b/283280194): Setup fqcn -> target and target -> Render jar mappings to avoid // iterating over all render jars when trying to locate class for fqcn. // TODO(b/284002836): Collect metrics on time taken to iterate over the jars - for (File renderJar : artifactTracker.getRenderJars()) { + for (File renderJar : renderJarArtifactTracker.getRenderJars()) { VirtualFile renderResolveJarVf = VirtualFileSystemProvider.getInstance().getSystem().findFileByIoFile(renderJar); if (renderResolveJarVf != null) { diff --git a/aswb/src/com/google/idea/blaze/android/sync/model/idea/BlazeClassJarProvider.java b/aswb/src/com/google/idea/blaze/android/sync/model/idea/BlazeClassJarProvider.java index 4081f820525..7c4bb24eefa 100644 --- a/aswb/src/com/google/idea/blaze/android/sync/model/idea/BlazeClassJarProvider.java +++ b/aswb/src/com/google/idea/blaze/android/sync/model/idea/BlazeClassJarProvider.java @@ -32,10 +32,12 @@ import com.google.idea.blaze.base.ideinfo.TargetKey; import com.google.idea.blaze.base.ideinfo.TargetMap; import com.google.idea.blaze.base.model.BlazeProjectData; +import com.google.idea.blaze.base.qsync.QuerySync; import com.google.idea.blaze.base.qsync.ArtifactTracker; import com.google.idea.blaze.base.qsync.QuerySyncManager; import com.google.idea.blaze.base.settings.Blaze; import com.google.idea.blaze.base.settings.BlazeImportSettings.ProjectType; +import com.google.idea.blaze.base.qsync.RenderJarArtifactTracker; import com.google.idea.blaze.base.sync.data.BlazeProjectDataManager; import com.google.idea.blaze.base.sync.workspace.ArtifactLocationDecoder; import com.google.idea.blaze.base.targetmaps.TransitiveDependencyMap; @@ -74,8 +76,9 @@ public List getModuleExternalLibraries(Module module) { // As Query Sync has a single workspace module but multiple resource modules // (TODO(b/283282438): for setting up the resources). All render jars are mapped to the same // workspace module - ArtifactTracker artifactTracker = QuerySyncManager.getInstance(project).getArtifactTracker(); - return artifactTracker.getRenderJars(); + RenderJarArtifactTracker renderJarArtifactTracker = + QuerySyncManager.getInstance(project).getRenderJarArtifactTracker(); + return renderJarArtifactTracker.getRenderJars(); } BlazeProjectData blazeProjectData = diff --git a/base/src/com/google/idea/blaze/base/qsync/ArtifactTracker.java b/base/src/com/google/idea/blaze/base/qsync/ArtifactTracker.java index d63e71a6694..5bb057287e0 100644 --- a/base/src/com/google/idea/blaze/base/qsync/ArtifactTracker.java +++ b/base/src/com/google/idea/blaze/base/qsync/ArtifactTracker.java @@ -15,8 +15,6 @@ */ package com.google.idea.blaze.base.qsync; -import com.google.auto.value.AutoValue; -import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.idea.blaze.base.scope.BlazeContext; import com.google.idea.blaze.common.Context; @@ -25,7 +23,6 @@ import com.google.idea.blaze.qsync.cc.CcDependenciesInfo; import com.google.idea.blaze.qsync.project.BuildGraphData; import com.google.idea.blaze.qsync.project.ProjectProto; -import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.Optional; @@ -38,12 +35,8 @@ public interface ArtifactTracker { void clear() throws IOException; /** Fetches, caches and sets up new artifacts. */ - UpdateResult update(Set