diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/DefaultGradleBuildScriptClasspathModel.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/DefaultGradleBuildScriptClasspathModel.java index b1e709dc4d48..c16a12739c7e 100644 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/DefaultGradleBuildScriptClasspathModel.java +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/DefaultGradleBuildScriptClasspathModel.java @@ -18,14 +18,15 @@ import java.util.Objects; @ApiStatus.Internal public class DefaultGradleBuildScriptClasspathModel implements GradleBuildScriptClasspathModel { - private final @NotNull List myClasspathEntries; + private @NotNull List 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 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; } diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/GradleBuildScriptClasspathModelBuilder.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/GradleBuildScriptClasspathModelBuilder.java index 604970dfe680..8da58ffa4a65 100644 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/GradleBuildScriptClasspathModelBuilder.java +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/GradleBuildScriptClasspathModelBuilder.java @@ -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 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 projectDependencyArtifacts = projectDependency.getProjectDependencyArtifacts(); Collection 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); diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/GradleBuildScriptClasspathSerializationService.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/GradleBuildScriptClasspathSerializationService.java index 9cd9cc759b5f..5a458e0caed7 100644 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/GradleBuildScriptClasspathSerializationService.java +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/buildScriptClasspathModel/GradleBuildScriptClasspathSerializationService.java @@ -115,10 +115,7 @@ public final class GradleBuildScriptClasspathSerializationService implements Ser } classpathModel.setGradleVersion(context.gradleVersion); classpathModel.setGradleHomeDir(context.gradleHomeDir); - List classpathEntries = readClasspath(reader); - for (ClasspathEntryModel entry : classpathEntries) { - classpathModel.add(entry); - } + classpathModel.setClasspath(readClasspath(reader)); return classpathModel; } }); diff --git a/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/serialization/ToolingSerializerTest.kt b/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/serialization/ToolingSerializerTest.kt index 4585a088c03b..549b04ddf079 100644 --- a/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/serialization/ToolingSerializerTest.kt +++ b/plugins/gradle/tooling-extension-impl/testSources/org/jetbrains/plugins/gradle/tooling/serialization/ToolingSerializerTest.kt @@ -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(