Gradle: buildscript configuration respect inheritance

This commit is contained in:
Vladislav.Soroka
2014-01-28 14:31:07 +04:00
parent e140b1e35c
commit 0f133cf8a5
4 changed files with 43 additions and 11 deletions
@@ -22,14 +22,13 @@ import org.gradle.plugins.ide.idea.model.IdeaModel;
import org.gradle.plugins.ide.internal.IdeDependenciesExtractor;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.model.BuildScriptClasspathModel;
import org.jetbrains.plugins.gradle.model.ClasspathEntryModel;
import org.jetbrains.plugins.gradle.model.ModelBuilderService;
import org.jetbrains.plugins.gradle.model.internal.BuildScriptClasspathModelImpl;
import org.jetbrains.plugins.gradle.model.internal.ClasspathEntryModelImpl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author Vladislav.Soroka
@@ -37,6 +36,8 @@ import java.util.List;
*/
public class ModelBuildScriptClasspathBuilderImpl implements ModelBuilderService {
private final Map<String, BuildScriptClasspathModelImpl> cache = new ConcurrentHashMap<String, BuildScriptClasspathModelImpl>();
@Override
public boolean canBuild(String modelName) {
return BuildScriptClasspathModel.class.getName().equals(modelName);
@@ -45,6 +46,9 @@ public class ModelBuildScriptClasspathBuilderImpl implements ModelBuilderService
@Nullable
@Override
public Object buildAll(final String modelName, final Project project) {
BuildScriptClasspathModelImpl buildScriptClasspath = cache.get(project.getPath());
if (buildScriptClasspath != null) return buildScriptClasspath;
boolean offline = false;
boolean downloadJavadoc = false;
boolean downloadSources = true;
@@ -60,13 +64,22 @@ public class ModelBuildScriptClasspathBuilderImpl implements ModelBuilderService
}
}
buildScriptClasspath = new BuildScriptClasspathModelImpl();
Project parent = project.getParent();
if (parent != null) {
BuildScriptClasspathModelImpl parentBuildScriptClasspath = (BuildScriptClasspathModelImpl)buildAll(modelName, parent);
if (parentBuildScriptClasspath != null) {
for (ClasspathEntryModel classpathEntryModel : parentBuildScriptClasspath.getClasspath()) {
buildScriptClasspath.add(classpathEntryModel);
}
}
}
final IdeDependenciesExtractor dependenciesExtractor = new IdeDependenciesExtractor();
final Configuration configuration = project.getBuildscript().getConfigurations().findByName("classpath");
Collection<Configuration> plusConfigurations = Collections.singletonList(configuration);
BuildScriptClasspathModelImpl buildScriptClasspath = new BuildScriptClasspathModelImpl();
if (!offline) {
// download sources and/or javadoc
List<IdeDependenciesExtractor.IdeRepoFileDependency> repoFileDependencies = dependenciesExtractor.extractRepoFileDependencies(
@@ -88,6 +101,7 @@ public class ModelBuildScriptClasspathBuilderImpl implements ModelBuilderService
buildScriptClasspath.add(new ClasspathEntryModelImpl(dependency.getFile(), null, null));
}
cache.put(project.getPath(), buildScriptClasspath);
return buildScriptClasspath;
}
}
@@ -7,3 +7,11 @@ project("moduleWithAdditionalClasspath") {
}
}
}
project("baseModule") {
buildscript {
dependencies {
classpath files("lib/inheritedDep.jar")
}
}
}
@@ -1,4 +1,6 @@
//noinspection GrPackage
include 'moduleWithoutAdditionalClasspath'
include 'moduleWithAdditionalClasspath'
include 'moduleWithAdditionalClasspath'
include 'baseModule'
include 'baseModule:moduleWithInheritedClasspath'
@@ -55,20 +55,28 @@ public class ModelBuildScriptClasspathBuilderImplTest extends AbstractModelBuild
ClasspathEntryModel classpathEntry = classpathModel.getClasspath().getAt(0);
assertEquals("someDep.jar", classpathEntry.getClassesFile().getName());
}
else if (module.getName().equals("baseModule") ||
module.getName().equals("moduleWithInheritedClasspath")) {
assertNotNull("Null build classpath for module: " + module.getName(), classpathModel);
assertEquals("Wrong build classpath for module: " + module.getName(), 1, classpathModel.getClasspath().size());
ClasspathEntryModel classpathEntry = classpathModel.getClasspath().getAt(0);
assertEquals("Wrong build classpath for module: " + module.getName(), "inheritedDep.jar", classpathEntry.getClassesFile().getName());
}
else if (module.getName().equals("moduleWithoutAdditionalClasspath") ||
module.getName().equals("testModelBuildScriptClasspathBuilder")) {
assertNotNull(classpathModel);
assertTrue(classpathModel.getClasspath().isEmpty());
assertNotNull("Wrong build classpath for module: " + module.getName(), classpathModel);
assertTrue("Wrong build classpath for module: " + module.getName(), classpathModel.getClasspath().isEmpty());
}
else {
fail();
fail("Unexpected module found: " + module.getName());
}
return classpathModel;
}
});
assertEquals(3, ideaModule.size());
assertEquals(5, ideaModule.size());
}
@Override