diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/CompileDependenciesProvider.java b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/CompileDependenciesProvider.java index 7859940a42f0..159e57598727 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/CompileDependenciesProvider.java +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/CompileDependenciesProvider.java @@ -9,6 +9,9 @@ import org.jetbrains.plugins.gradle.model.ExternalDependency; import java.io.File; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; public class CompileDependenciesProvider { public static final String SCOPE = "COMPILE"; @@ -21,26 +24,39 @@ public class CompileDependenciesProvider { private Configuration myCompileOnlyConfiguration; private Collection myDependencies; private Collection myFiles; + private final Map> myConfigurationFilesCache = new HashMap>(); public CompileDependenciesProvider(SourceSet sourceSet, Project project) { mySourceSet = sourceSet; myProject = project; } - public Configuration getDeprecatedCompileConfiguration() { - return myConfiguration; + public Set getDeprecatedCompileConfigurationFiles() { + return getFilesFromCache(myConfiguration); } public Configuration getCompileClasspathConfiguration() { return myCompileClasspathConfiguration; } - public Configuration getCompileConfiguration() { - return myCompileConfiguration; + public Set getCompileConfigurationFiles() { + return getFilesFromCache(myCompileConfiguration); } - public Configuration getCompileOnlyConfiguration() { - return myCompileOnlyConfiguration; + public Set getCompileOnlyConfigurationFiles() { + return getFilesFromCache(myCompileOnlyConfiguration); + } + + private Set getFilesFromCache(Configuration key) { + if (key == null) { + return null; + } + Set cached = myConfigurationFilesCache.get(key); + if (cached == null) { + cached = key.getFiles(); + myConfigurationFilesCache.put(key, cached); + } + return cached; } public Collection getDependencies() { diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/DependencyResolverImpl.java b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/DependencyResolverImpl.java index bc082889fae7..8ba04ac7a1b5 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/DependencyResolverImpl.java +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/DependencyResolverImpl.java @@ -476,25 +476,27 @@ public class DependencyResolverImpl implements DependencyResolver { @NotNull final RuntimeDependenciesProvider runtimeDependenciesProvider, @NotNull final AbstractExternalDependency dep) { Collection resolvedFiles = getFiles(dep); - Configuration compileOnlyConfiguration = compileDependenciesProvider.getCompileOnlyConfiguration(); - Configuration deprecatedCompileConfiguration = compileDependenciesProvider.getDeprecatedCompileConfiguration(); - Configuration compileConfiguration = compileDependenciesProvider.getCompileConfiguration(); boolean checkCompileOnlyDeps = compileDependenciesProvider.getCompileClasspathConfiguration() != null; + final Set compileConfigurationFiles = compileDependenciesProvider.getCompileConfigurationFiles(); + final Set compileOnlyConfigurationFiles = compileDependenciesProvider.getCompileOnlyConfigurationFiles(); + final Set deprecatedCompileConfigurationFiles = compileDependenciesProvider.getDeprecatedCompileConfigurationFiles(); + + final Set runtimeConfigurationFiles = runtimeDependenciesProvider.getConfigurationFiles(); // since version 3.4 compileOnly no longer extends compile // so, we can use compileOnly configuration for the check if (isJavaLibraryPluginSupported) { - if (compileOnlyConfiguration != null && containsAll(compileOnlyConfiguration, resolvedFiles)) { + if (compileOnlyConfigurationFiles != null && compileOnlyConfigurationFiles.containsAll(resolvedFiles)) { // deprecated 'compile' configuration still can be used - if (deprecatedCompileConfiguration == null || !containsAll(deprecatedCompileConfiguration, resolvedFiles)) { + if (deprecatedCompileConfigurationFiles == null || !deprecatedCompileConfigurationFiles.containsAll(resolvedFiles)) { dep.setScope(PROVIDED_SCOPE); } } } else { if (checkCompileOnlyDeps - && !containsAll(compileConfiguration, resolvedFiles) - && !containsAll(runtimeDependenciesProvider.getConfiguration(), resolvedFiles)) { + && !compileConfigurationFiles.containsAll(resolvedFiles) + && !runtimeConfigurationFiles.containsAll(resolvedFiles)) { dep.setScope(PROVIDED_SCOPE); } } diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/RuntimeDependenciesProvider.java b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/RuntimeDependenciesProvider.java index 402fc2d79f2e..5c3dd3b69331 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/RuntimeDependenciesProvider.java +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/resolve/RuntimeDependenciesProvider.java @@ -7,6 +7,7 @@ import org.jetbrains.plugins.gradle.model.ExternalDependency; import java.io.File; import java.util.Collection; +import java.util.Set; public class RuntimeDependenciesProvider { public static final String SCOPE = "RUNTIME"; @@ -16,6 +17,7 @@ public class RuntimeDependenciesProvider { private Configuration myConfiguration; private Collection myDependencies; private Collection myFiles; + private Set myConfigurationFiles = null; public RuntimeDependenciesProvider(SourceSet sourceSet, Project project) { @@ -27,6 +29,13 @@ public class RuntimeDependenciesProvider { return myConfiguration; } + public Set getConfigurationFiles() { + if (myConfigurationFiles == null) { + myConfigurationFiles = myConfiguration.getFiles(); + } + return myConfigurationFiles; + } + public Collection getDependencies() { return myDependencies; }