IDEA-385795 [gradle|tooling] cleanup GradleBuildScriptClasspathModel: replace add() with setClasspath()

Collecting entries into a local list and setting them all at once is simpler than maintaining a rolling hash via repeated add() calls.
Call sites no longer need a forEach loop to populate the model.

GitOrigin-RevId: 567c4f6252642f61e470d178428afb7ce940ee5c
This commit is contained in:
Sergei Vorobyov
2026-04-28 20:32:32 +00:00
committed by intellij-monorepo-bot
parent 1afd5d66a8
commit cb6b37c22f
4 changed files with 23 additions and 22 deletions
@@ -18,14 +18,15 @@ import java.util.Objects;
@ApiStatus.Internal
public class DefaultGradleBuildScriptClasspathModel implements GradleBuildScriptClasspathModel {
private final @NotNull List<ClasspathEntryModel> myClasspathEntries;
private @NotNull List<ClasspathEntryModel> myClasspathEntries;
private int myClasspathEntriesHashCode;
private @Nullable File gradleHomeDir;
private String myGradleVersion;
private int myClasspathEntriesHashCode;
public DefaultGradleBuildScriptClasspathModel() {
myClasspathEntries = new ArrayList<>(0);
myClasspathEntriesHashCode = 0;
myClasspathEntriesHashCode = myClasspathEntries.hashCode();
}
@Override
@@ -33,6 +34,11 @@ public class DefaultGradleBuildScriptClasspathModel implements GradleBuildScript
return myClasspathEntries;
}
public void setClasspath(@NotNull List<ClasspathEntryModel> classpathEntries) {
myClasspathEntries = classpathEntries;
myClasspathEntriesHashCode = myClasspathEntries.hashCode();
}
public void setGradleHomeDir(@Nullable File file) {
gradleHomeDir = file;
}
@@ -42,11 +48,6 @@ public class DefaultGradleBuildScriptClasspathModel implements GradleBuildScript
return gradleHomeDir;
}
public void add(@NotNull ClasspathEntryModel classpathEntryModel) {
myClasspathEntries.add(classpathEntryModel);
myClasspathEntriesHashCode = 31 * myClasspathEntriesHashCode + classpathEntryModel.hashCode();
}
public void setGradleVersion(@NotNull String gradleVersion) {
myGradleVersion = gradleVersion;
}
@@ -24,8 +24,10 @@ import org.jetbrains.plugins.gradle.tooling.ModelBuilderContext;
import org.jetbrains.plugins.gradle.tooling.internal.ClasspathEntryModelImpl;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* @author Vladislav.Soroka
@@ -46,13 +48,13 @@ public class GradleBuildScriptClasspathModelBuilder extends AbstractModelBuilder
buildScriptClasspath.setGradleHomeDir(project.getGradle().getGradleHomeDir());
buildScriptClasspath.setGradleVersion(GradleVersion.current().getVersion());
List<ClasspathEntryModel> classpathEntries = new ArrayList<>();
Project parentProject = project.getParent();
if (parentProject != null) {
GradleBuildScriptClasspathModel parentBuildScriptClasspath = GradleBuildScriptClasspathCache.getInstance(context)
.getBuildScriptClasspathModel(parentProject);
for (ClasspathEntryModel classpathEntryModel : parentBuildScriptClasspath.getClasspath()) {
buildScriptClasspath.add(classpathEntryModel);
}
classpathEntries.addAll(parentBuildScriptClasspath.getClasspath());
}
Configuration classpathConfiguration = project.getBuildscript().getConfigurations().findByName(CLASSPATH_CONFIGURATION_NAME);
@@ -65,7 +67,7 @@ public class GradleBuildScriptClasspathModelBuilder extends AbstractModelBuilder
ExternalProjectDependency projectDependency = (ExternalProjectDependency)dependency;
Collection<File> projectDependencyArtifacts = projectDependency.getProjectDependencyArtifacts();
Collection<File> projectDependencyArtifactsSources = projectDependency.getProjectDependencyArtifactsSources();
buildScriptClasspath.add(new ClasspathEntryModelImpl(
classpathEntries.add(new ClasspathEntryModelImpl(
projectDependencyArtifacts,
projectDependencyArtifactsSources,
Collections.emptySet()
@@ -73,7 +75,7 @@ public class GradleBuildScriptClasspathModelBuilder extends AbstractModelBuilder
}
else if (dependency instanceof ExternalLibraryDependency) {
final ExternalLibraryDependency libraryDep = (ExternalLibraryDependency)dependency;
buildScriptClasspath.add(new ClasspathEntryModelImpl(
classpathEntries.add(new ClasspathEntryModelImpl(
GradleCollections.createMaybeSingletonList(libraryDep.getFile()),
GradleCollections.createMaybeSingletonList(libraryDep.getSource()),
GradleCollections.createMaybeSingletonList(libraryDep.getJavadoc())
@@ -81,7 +83,7 @@ public class GradleBuildScriptClasspathModelBuilder extends AbstractModelBuilder
}
else if (dependency instanceof ExternalMultiLibraryDependency) {
ExternalMultiLibraryDependency multiLibraryDependency = (ExternalMultiLibraryDependency)dependency;
buildScriptClasspath.add(new ClasspathEntryModelImpl(
classpathEntries.add(new ClasspathEntryModelImpl(
multiLibraryDependency.getFiles(),
multiLibraryDependency.getSources(),
multiLibraryDependency.getJavadoc()
@@ -89,7 +91,7 @@ public class GradleBuildScriptClasspathModelBuilder extends AbstractModelBuilder
}
else if (dependency instanceof FileCollectionDependency) {
FileCollectionDependency fileCollectionDependency = (FileCollectionDependency)dependency;
buildScriptClasspath.add(new ClasspathEntryModelImpl(
classpathEntries.add(new ClasspathEntryModelImpl(
fileCollectionDependency.getFiles(),
Collections.emptySet(),
Collections.emptySet()
@@ -98,6 +100,8 @@ public class GradleBuildScriptClasspathModelBuilder extends AbstractModelBuilder
}
}
buildScriptClasspath.setClasspath(classpathEntries);
GradleBuildScriptClasspathCache.getInstance(context)
.setBuildScriptClasspathModel(project, buildScriptClasspath);
@@ -115,10 +115,7 @@ public final class GradleBuildScriptClasspathSerializationService implements Ser
}
classpathModel.setGradleVersion(context.gradleVersion);
classpathModel.setGradleHomeDir(context.gradleHomeDir);
List<ClasspathEntryModel> classpathEntries = readClasspath(reader);
for (ClasspathEntryModel entry : classpathEntries) {
classpathModel.add(entry);
}
classpathModel.setClasspath(readClasspath(reader));
return classpathModel;
}
});
@@ -98,9 +98,8 @@ class ToolingSerializerTest {
myRandomParameters.randomize(DefaultGradleBuildScriptClasspathModel::class.java) {
val result = DefaultGradleBuildScriptClasspathModel()
result.gradleVersion = myRandom.nextObject(String::class.java)
myRandom.objects(ClasspathEntryModel::class.java, myRandom.nextInt(1, 10))
.distinct()
.forEach { result.add(it) }
result.classpath = myRandom.objects(ClasspathEntryModel::class.java, myRandom.nextInt(1, 10))
.collect(Collectors.toList())
return@randomize result
}
doTest(