mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Gradle: buildscript configuration respect inheritance
This commit is contained in:
+20
-6
@@ -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'
|
||||
+12
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user