mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Gradle: use module level libraries for different dependencies with the same name (IDEA-191341)
This commit is contained in:
+32
-29
@@ -153,7 +153,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
mainModuleData.setIdeModuleGroup(isRootModule ? null : moduleGroup);
|
||||
}
|
||||
|
||||
for (ExternalSourceSet sourceSet : externalProject.getSourceSets().values()) {
|
||||
for (ExternalSourceSet sourceSet: externalProject.getSourceSets().values()) {
|
||||
final String moduleId = getModuleId(resolverCtx, gradleModule, sourceSet);
|
||||
final String moduleExternalName = gradleModule.getName() + ":" + sourceSet.getName();
|
||||
final String moduleInternalName = getInternalModuleName(gradleModule, externalProject, sourceSet.getName(), resolverCtx);
|
||||
@@ -207,14 +207,15 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
assert sourceSetMap != null;
|
||||
sourceSetMap.put(moduleId, Pair.create(sourceSetDataNode, sourceSet));
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
try {
|
||||
IdeaJavaLanguageSettings languageSettings = gradleModule.getJavaLanguageSettings();
|
||||
if(languageSettings != null) {
|
||||
if(languageSettings.getLanguageLevel() != null) {
|
||||
if (languageSettings != null) {
|
||||
if (languageSettings.getLanguageLevel() != null) {
|
||||
mainModuleData.setSourceCompatibility(languageSettings.getLanguageLevel().toString());
|
||||
}
|
||||
if(languageSettings.getTargetBytecodeVersion() != null) {
|
||||
if (languageSettings.getTargetBytecodeVersion() != null) {
|
||||
mainModuleData.setTargetCompatibility(languageSettings.getTargetBytecodeVersion().toString());
|
||||
}
|
||||
}
|
||||
@@ -271,11 +272,11 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
processSourceSets(resolverCtx, gradleModule, externalProject, ideModule, new SourceSetsProcessor() {
|
||||
@Override
|
||||
public void process(@NotNull DataNode<? extends ModuleData> dataNode, @NotNull ExternalSourceSet sourceSet) {
|
||||
for (Map.Entry<IExternalSystemSourceType, ExternalSourceDirectorySet> directorySetEntry : sourceSet.getSources().entrySet()) {
|
||||
for (Map.Entry<IExternalSystemSourceType, ExternalSourceDirectorySet> directorySetEntry: sourceSet.getSources().entrySet()) {
|
||||
ExternalSystemSourceType sourceType = ExternalSystemSourceType.from(directorySetEntry.getKey());
|
||||
ExternalSourceDirectorySet sourceDirectorySet = directorySetEntry.getValue();
|
||||
|
||||
for (File file : sourceDirectorySet.getSrcDirs()) {
|
||||
for (File file: sourceDirectorySet.getSrcDirs()) {
|
||||
ContentRootData ideContentRoot = new ContentRootData(GradleConstants.SYSTEM_ID, file.getAbsolutePath());
|
||||
ideContentRoot.storePath(sourceType, file.getAbsolutePath());
|
||||
dataNode.createChild(ProjectKeys.CONTENT_ROOT, ideContentRoot);
|
||||
@@ -289,7 +290,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
if (contentRoots == null) {
|
||||
return;
|
||||
}
|
||||
for (IdeaContentRoot gradleContentRoot : contentRoots) {
|
||||
for (IdeaContentRoot gradleContentRoot: contentRoots) {
|
||||
if (gradleContentRoot == null) continue;
|
||||
|
||||
File rootDirectory = gradleContentRoot.getRootDirectory();
|
||||
@@ -309,7 +310,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
|
||||
Set<File> excluded = gradleContentRoot.getExcludeDirectories();
|
||||
if (excluded != null) {
|
||||
for (File file : excluded) {
|
||||
for (File file: excluded) {
|
||||
ideContentRoot.storePath(ExternalSystemSourceType.EXCLUDED, file.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
@@ -323,11 +324,11 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
@NotNull DataNode<ModuleData> ideModule,
|
||||
@NotNull SourceSetsProcessor processor) {
|
||||
Map<String, DataNode<GradleSourceSetData>> sourceSetsMap = ContainerUtil.newHashMap();
|
||||
for (DataNode<GradleSourceSetData> dataNode : ExternalSystemApiUtil.findAll(ideModule, GradleSourceSetData.KEY)) {
|
||||
for (DataNode<GradleSourceSetData> dataNode: ExternalSystemApiUtil.findAll(ideModule, GradleSourceSetData.KEY)) {
|
||||
sourceSetsMap.put(dataNode.getData().getId(), dataNode);
|
||||
}
|
||||
|
||||
for (ExternalSourceSet sourceSet : externalProject.getSourceSets().values()) {
|
||||
for (ExternalSourceSet sourceSet: externalProject.getSourceSets().values()) {
|
||||
if (sourceSet == null || sourceSet.getSources().isEmpty()) continue;
|
||||
|
||||
final String moduleId = getModuleId(resolverCtx, gradleModule, sourceSet);
|
||||
@@ -361,7 +362,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
gradleOutputMap = MultiMap.create();
|
||||
dataNode.putUserData(GradleProjectResolver.GRADLE_OUTPUTS, gradleOutputMap);
|
||||
}
|
||||
for (Map.Entry<IExternalSystemSourceType, ExternalSourceDirectorySet> directorySetEntry : sourceSet.getSources().entrySet()) {
|
||||
for (Map.Entry<IExternalSystemSourceType, ExternalSourceDirectorySet> directorySetEntry: sourceSet.getSources().entrySet()) {
|
||||
ExternalSystemSourceType sourceType = ExternalSystemSourceType.from(directorySetEntry.getKey());
|
||||
ExternalSourceDirectorySet sourceDirectorySet = directorySetEntry.getValue();
|
||||
final ModuleData moduleData = dataNode.getData();
|
||||
@@ -370,10 +371,10 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
moduleData.setCompileOutputPath(sourceType, outputDir.getAbsolutePath());
|
||||
moduleData.setInheritProjectCompileOutputPath(sourceDirectorySet.isCompilerOutputPathInherited());
|
||||
|
||||
for (File gradleOutputDir : sourceDirectorySet.getGradleOutputDirs()) {
|
||||
for (File gradleOutputDir: sourceDirectorySet.getGradleOutputDirs()) {
|
||||
String gradleOutputPath = ExternalSystemApiUtil.toCanonicalPath(gradleOutputDir.getAbsolutePath());
|
||||
gradleOutputMap.putValue(sourceType, gradleOutputPath);
|
||||
if(!gradleOutputDir.getPath().equals(outputDir.getPath())) {
|
||||
if (!gradleOutputDir.getPath().equals(outputDir.getPath())) {
|
||||
moduleOutputsMap.put(gradleOutputPath, Pair.create(moduleData.getId(), sourceType));
|
||||
}
|
||||
}
|
||||
@@ -408,7 +409,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<ExternalSystemSourceType, File> sourceTypeFileEntry : compileOutputPaths.entrySet()) {
|
||||
for (Map.Entry<ExternalSystemSourceType, File> sourceTypeFileEntry: compileOutputPaths.entrySet()) {
|
||||
final File outputPath = sourceTypeFileEntry.getValue();
|
||||
if (outputPath != null) {
|
||||
moduleData.setCompileOutputPath(sourceTypeFileEntry.getKey(), outputPath.getAbsolutePath());
|
||||
@@ -471,7 +472,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
List<String> orphanModules = ContainerUtil.newArrayList();
|
||||
Map<String, ModuleData> modulesIndex = ContainerUtil.newHashMap();
|
||||
|
||||
for (DataNode<ModuleData> dataNode : ExternalSystemApiUtil.getChildren(ideProject, ProjectKeys.MODULE)) {
|
||||
for (DataNode<ModuleData> dataNode: ExternalSystemApiUtil.getChildren(ideProject, ProjectKeys.MODULE)) {
|
||||
modulesIndex.put(dataNode.getData().getExternalName(), dataNode.getData());
|
||||
}
|
||||
|
||||
@@ -545,7 +546,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
|
||||
final boolean isFlatProject = !FileUtil.isAncestor(rootProjectPath, moduleConfigPath, false);
|
||||
if (externalProject != null) {
|
||||
for (ExternalTask task : externalProject.getTasks().values()) {
|
||||
for (ExternalTask task: externalProject.getTasks().values()) {
|
||||
String taskName = isFlatProject ? task.getQName() : task.getName();
|
||||
String taskGroup = task.getGroup();
|
||||
if (taskName.trim().isEmpty() || isIdeaTask(taskName, taskGroup)) {
|
||||
@@ -563,7 +564,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
return tasks;
|
||||
}
|
||||
|
||||
for (GradleTask task : gradleModule.getGradleProject().getTasks()) {
|
||||
for (GradleTask task: gradleModule.getGradleProject().getTasks()) {
|
||||
String taskName = task.getName();
|
||||
String taskGroup = getTaskGroup(task);
|
||||
if (taskName == null || taskName.trim().isEmpty() || isIdeaTask(taskName, taskGroup)) {
|
||||
@@ -743,7 +744,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
if (dirs == null) {
|
||||
return;
|
||||
}
|
||||
for (IdeaSourceDirectory dir : dirs) {
|
||||
for (IdeaSourceDirectory dir: dirs) {
|
||||
ExternalSystemSourceType dirSourceType = type;
|
||||
try {
|
||||
if (dir.isGenerated() && !dirSourceType.isGenerated()) {
|
||||
@@ -773,7 +774,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
final Class<?> aClass = obj.getClass();
|
||||
LOG.debug(String.format("obj class: %s", aClass));
|
||||
LOG.debug(String.format("classloader: %s", aClass.getClassLoader()));
|
||||
for (Method m : aClass.getDeclaredMethods()) {
|
||||
for (Method m: aClass.getDeclaredMethods()) {
|
||||
LOG.debug(String.format("obj m: %s", m));
|
||||
}
|
||||
|
||||
@@ -788,7 +789,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
LOG.debug(String.format("delegate: %s", delegate));
|
||||
LOG.debug(String.format("delegate class: %s", delegate.getClass()));
|
||||
LOG.debug(String.format("delegate classloader: %s", delegate.getClass().getClassLoader()));
|
||||
for (Method m : delegate.getClass().getDeclaredMethods()) {
|
||||
for (Method m: delegate.getClass().getDeclaredMethods()) {
|
||||
LOG.debug(String.format("delegate m: %s", m));
|
||||
}
|
||||
}
|
||||
@@ -807,7 +808,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
if (scopeAsString == null) {
|
||||
return null;
|
||||
}
|
||||
for (DependencyScope dependencyScope : DependencyScope.values()) {
|
||||
for (DependencyScope dependencyScope: DependencyScope.values()) {
|
||||
if (scopeAsString.equalsIgnoreCase(dependencyScope.toString())) {
|
||||
return dependencyScope;
|
||||
}
|
||||
@@ -819,7 +820,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
private static ModuleDependencyData buildDependency(@NotNull ProjectResolverContext resolverContext,
|
||||
@NotNull DataNode<ModuleData> ownerModule,
|
||||
@NotNull IdeaModuleDependency dependency,
|
||||
@NotNull Map<String, ModuleData> registeredModulesIndex)
|
||||
@NotNull Map<String, ModuleData> registeredModulesIndex)
|
||||
throws IllegalStateException {
|
||||
|
||||
final GradleExecutionSettings gradleExecutionSettings = resolverContext.getSettings();
|
||||
@@ -873,8 +874,8 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
}
|
||||
|
||||
String libraryName;
|
||||
LibraryLevel level;
|
||||
final GradleModuleVersion moduleVersion = dependency.getGradleModuleVersion();
|
||||
final LibraryLevel level;
|
||||
|
||||
// Gradle API doesn't explicitly provide information about unresolved libraries (http://issues.gradle.org/browse/GRADLE-1995).
|
||||
// That's why we use this dirty hack here.
|
||||
@@ -885,12 +886,14 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
boolean isModuleLocalLibrary = false;
|
||||
try {
|
||||
isModuleLocalLibrary = FileUtil.isAncestor(gradleModule.getGradleProject().getProjectDirectory(), binaryPath, false);
|
||||
} catch (UnsupportedMethodException e) {
|
||||
}
|
||||
catch (UnsupportedMethodException e) {
|
||||
// ignore, generate project-level library for the dependency
|
||||
}
|
||||
if (isModuleLocalLibrary) {
|
||||
level = LibraryLevel.MODULE;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
level = LibraryLevel.PROJECT;
|
||||
}
|
||||
|
||||
@@ -948,7 +951,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
}
|
||||
|
||||
final LibraryData library = new LibraryData(GradleConstants.SYSTEM_ID, libraryName, unresolved);
|
||||
if(moduleVersion != null) {
|
||||
if (moduleVersion != null) {
|
||||
library.setGroup(moduleVersion.getGroup());
|
||||
library.setArtifactId(moduleVersion.getName());
|
||||
library.setVersion(moduleVersion.getVersion());
|
||||
@@ -975,8 +978,8 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
|
||||
library.addPath(LibraryPathType.DOC, javadocPath.getAbsolutePath());
|
||||
}
|
||||
|
||||
if (level == LibraryLevel.PROJECT) {
|
||||
linkProjectLibrary(ideProject, library);
|
||||
if (level == LibraryLevel.PROJECT && !linkProjectLibrary(ideProject, library)) {
|
||||
level = LibraryLevel.MODULE;
|
||||
}
|
||||
|
||||
return new LibraryDependencyData(ownerModule.getData(), library, level);
|
||||
|
||||
+31
-28
@@ -205,7 +205,7 @@ public class GradleProjectResolverUtil {
|
||||
*/
|
||||
@Nullable
|
||||
public static File getModuleDirPath(@NotNull GradleBuild build, @NotNull String path) {
|
||||
for (BasicGradleProject project : build.getProjects()) {
|
||||
for (BasicGradleProject project: build.getProjects()) {
|
||||
if (project.getPath().equals(path)) {
|
||||
return project.getProjectDirectory();
|
||||
}
|
||||
@@ -323,7 +323,7 @@ public class GradleProjectResolverUtil {
|
||||
File gradleSrc = new File(gradleHomeDir, "src");
|
||||
File[] gradleSrcRoots = gradleSrc.listFiles();
|
||||
if (gradleSrcRoots == null) return;
|
||||
for (File srcRoot : gradleSrcRoots) {
|
||||
for (File srcRoot: gradleSrcRoots) {
|
||||
library.addPath(LibraryPathType.SOURCE, srcRoot.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
@@ -357,7 +357,7 @@ public class GradleProjectResolverUtil {
|
||||
return;
|
||||
}
|
||||
|
||||
for (String path : libraryData.getPaths(LibraryPathType.BINARY)) {
|
||||
for (String path: libraryData.getPaths(LibraryPathType.BINARY)) {
|
||||
try {
|
||||
final Path file = Paths.get(path);
|
||||
if (!FileUtil.isAncestor(gradleUserHomeDir.getPath(), path, true)) continue;
|
||||
@@ -497,7 +497,7 @@ public class GradleProjectResolverUtil {
|
||||
@Nullable DataNode<ProjectData> ideProject) throws IllegalStateException {
|
||||
|
||||
Map<ExternalDependencyId, ExternalDependency> dependencyMap = ContainerUtil.newLinkedHashMap();
|
||||
for (ExternalDependency dependency : dependencies) {
|
||||
for (ExternalDependency dependency: dependencies) {
|
||||
final ExternalDependency dep = dependencyMap.get(dependency.getId());
|
||||
if (dep instanceof AbstractExternalDependency) {
|
||||
dep.getDependencies().addAll(ContainerUtil.subtract(dependency.getDependencies(), dep.getDependencies()));
|
||||
@@ -507,7 +507,7 @@ public class GradleProjectResolverUtil {
|
||||
}
|
||||
}
|
||||
|
||||
for (ExternalDependency dependency : dependencyMap.values()) {
|
||||
for (ExternalDependency dependency: dependencyMap.values()) {
|
||||
final ExternalDependency mergedDependency = ContainerUtil.getOrElse(mergedDependencyMap, dependency.getId(), dependency);
|
||||
DependencyScope dependencyScope = getDependencyScope(mergedDependency.getScope());
|
||||
|
||||
@@ -552,7 +552,7 @@ public class GradleProjectResolverUtil {
|
||||
String moduleId = getModuleId(projectDependency);
|
||||
Pair<DataNode<GradleSourceSetData>, ExternalSourceSet> projectPair = sourceSetMap.get(moduleId);
|
||||
if (projectPair == null) {
|
||||
for (File file : projectDependency.getProjectDependencyArtifacts()) {
|
||||
for (File file: projectDependency.getProjectDependencyArtifacts()) {
|
||||
moduleId = artifactsMap.get(ExternalSystemApiUtil.toCanonicalPath(file.getAbsolutePath()));
|
||||
if (moduleId == null) continue;
|
||||
projectPair = sourceSetMap.get(moduleId);
|
||||
@@ -577,7 +577,7 @@ public class GradleProjectResolverUtil {
|
||||
libraryDependencyData.setExported(mergedDependency.getExported());
|
||||
|
||||
if (!projectDependency.getProjectDependencyArtifacts().isEmpty()) {
|
||||
for (File artifact : projectDependency.getProjectDependencyArtifacts()) {
|
||||
for (File artifact: projectDependency.getProjectDependencyArtifacts()) {
|
||||
library.addPath(LibraryPathType.BINARY, artifact.getPath());
|
||||
}
|
||||
depOwnerDataNode = ownerDataNode.createChild(ProjectKeys.LIBRARY_DEPENDENCY, libraryDependencyData);
|
||||
@@ -587,7 +587,7 @@ public class GradleProjectResolverUtil {
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (ProjectDependencyInfo projectDependencyInfo : projectDependencyInfos) {
|
||||
for (ProjectDependencyInfo projectDependencyInfo: projectDependencyInfos) {
|
||||
ModuleDependencyData moduleDependencyData = new ModuleDependencyData(ownerModule, projectDependencyInfo.myModuleData);
|
||||
moduleDependencyData.setScope(dependencyScope);
|
||||
if (projectDependencyInfo.mySourceSet != null && "test".equals(projectDependencyInfo.mySourceSet.getName())) {
|
||||
@@ -608,15 +608,10 @@ public class GradleProjectResolverUtil {
|
||||
}
|
||||
else if (mergedDependency instanceof ExternalLibraryDependency) {
|
||||
String libraryName = mergedDependency.getId().getPresentableName();
|
||||
final LibraryLevel level = StringUtil.isNotEmpty(libraryName) ? LibraryLevel.PROJECT : LibraryLevel.MODULE;
|
||||
final LibraryData library = new LibraryData(GradleConstants.SYSTEM_ID, libraryName);
|
||||
library.setArtifactId(mergedDependency.getId().getName());
|
||||
library.setGroup(mergedDependency.getId().getGroup());
|
||||
library.setVersion(mergedDependency.getId().getVersion());
|
||||
LibraryDependencyData libraryDependencyData = new LibraryDependencyData(ownerModule, library, level);
|
||||
libraryDependencyData.setScope(dependencyScope);
|
||||
libraryDependencyData.setOrder(mergedDependency.getClasspathOrder());
|
||||
libraryDependencyData.setExported(mergedDependency.getExported());
|
||||
|
||||
library.addPath(LibraryPathType.BINARY, ((ExternalLibraryDependency)mergedDependency).getFile().getAbsolutePath());
|
||||
File sourcePath = ((ExternalLibraryDependency)mergedDependency).getSource();
|
||||
@@ -627,11 +622,17 @@ public class GradleProjectResolverUtil {
|
||||
if (javaDocPath != null) {
|
||||
library.addPath(LibraryPathType.DOC, javaDocPath.getAbsolutePath());
|
||||
}
|
||||
depOwnerDataNode = ownerDataNode.createChild(ProjectKeys.LIBRARY_DEPENDENCY, libraryDependencyData);
|
||||
|
||||
if (StringUtil.isNotEmpty(libraryName)) {
|
||||
linkProjectLibrary(ideProject, library);
|
||||
LibraryLevel level = StringUtil.isNotEmpty(libraryName) ? LibraryLevel.PROJECT : LibraryLevel.MODULE;
|
||||
if (StringUtil.isEmpty(libraryName) || !linkProjectLibrary(ideProject, library)) {
|
||||
level = LibraryLevel.MODULE;
|
||||
}
|
||||
|
||||
LibraryDependencyData libraryDependencyData = new LibraryDependencyData(ownerModule, library, level);
|
||||
libraryDependencyData.setScope(dependencyScope);
|
||||
libraryDependencyData.setOrder(mergedDependency.getClasspathOrder());
|
||||
libraryDependencyData.setExported(mergedDependency.getExported());
|
||||
depOwnerDataNode = ownerDataNode.createChild(ProjectKeys.LIBRARY_DEPENDENCY, libraryDependencyData);
|
||||
}
|
||||
else if (mergedDependency instanceof ExternalMultiLibraryDependency) {
|
||||
final LibraryLevel level = LibraryLevel.MODULE;
|
||||
@@ -645,13 +646,13 @@ public class GradleProjectResolverUtil {
|
||||
libraryDependencyData.setOrder(mergedDependency.getClasspathOrder());
|
||||
libraryDependencyData.setExported(mergedDependency.getExported());
|
||||
|
||||
for (File file : ((ExternalMultiLibraryDependency)mergedDependency).getFiles()) {
|
||||
for (File file: ((ExternalMultiLibraryDependency)mergedDependency).getFiles()) {
|
||||
library.addPath(LibraryPathType.BINARY, file.getAbsolutePath());
|
||||
}
|
||||
for (File file : ((ExternalMultiLibraryDependency)mergedDependency).getSources()) {
|
||||
for (File file: ((ExternalMultiLibraryDependency)mergedDependency).getSources()) {
|
||||
library.addPath(LibraryPathType.SOURCE, file.getAbsolutePath());
|
||||
}
|
||||
for (File file : ((ExternalMultiLibraryDependency)mergedDependency).getJavadoc()) {
|
||||
for (File file: ((ExternalMultiLibraryDependency)mergedDependency).getJavadoc()) {
|
||||
library.addPath(LibraryPathType.DOC, file.getAbsolutePath());
|
||||
}
|
||||
|
||||
@@ -666,24 +667,23 @@ public class GradleProjectResolverUtil {
|
||||
libraryDependencyData.setOrder(mergedDependency.getClasspathOrder());
|
||||
libraryDependencyData.setExported(mergedDependency.getExported());
|
||||
|
||||
for (File file : ((FileCollectionDependency)mergedDependency).getFiles()) {
|
||||
for (File file: ((FileCollectionDependency)mergedDependency).getFiles()) {
|
||||
library.addPath(LibraryPathType.BINARY, file.getAbsolutePath());
|
||||
}
|
||||
|
||||
ownerDataNode.createChild(ProjectKeys.LIBRARY_DEPENDENCY, libraryDependencyData);
|
||||
}
|
||||
else if (mergedDependency instanceof UnresolvedExternalDependency) {
|
||||
final LibraryLevel level = LibraryLevel.PROJECT;
|
||||
String libraryName = mergedDependency.getId().getPresentableName();
|
||||
final LibraryData library = new LibraryData(GradleConstants.SYSTEM_ID, libraryName, true);
|
||||
LibraryDependencyData libraryDependencyData = new LibraryDependencyData(ownerModule, library, level);
|
||||
libraryDependencyData.setScope(dependencyScope);
|
||||
final String failureMessage = ((UnresolvedExternalDependency)mergedDependency).getFailureMessage();
|
||||
if (failureMessage != null) {
|
||||
library.addPath(LibraryPathType.BINARY, failureMessage);
|
||||
}
|
||||
LibraryLevel level = linkProjectLibrary(ideProject, library) ? LibraryLevel.PROJECT : LibraryLevel.MODULE;
|
||||
LibraryDependencyData libraryDependencyData = new LibraryDependencyData(ownerModule, library, level);
|
||||
libraryDependencyData.setScope(dependencyScope);
|
||||
ownerDataNode.createChild(ProjectKeys.LIBRARY_DEPENDENCY, libraryDependencyData);
|
||||
linkProjectLibrary(ideProject, library);
|
||||
}
|
||||
|
||||
if (depOwnerDataNode != null) {
|
||||
@@ -693,14 +693,17 @@ public class GradleProjectResolverUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static void linkProjectLibrary(@Nullable DataNode<ProjectData> ideProject, @NotNull final LibraryData library) {
|
||||
if (ideProject == null) return;
|
||||
public static boolean linkProjectLibrary(@Nullable DataNode<ProjectData> ideProject, @NotNull final LibraryData library) {
|
||||
if (ideProject == null) return false;
|
||||
|
||||
DataNode<LibraryData> libraryData =
|
||||
ExternalSystemApiUtil.find(ideProject, ProjectKeys.LIBRARY, node -> library.equals(node.getData()));
|
||||
String libraryName = library.getExternalName();
|
||||
DataNode<LibraryData> libraryData = ExternalSystemApiUtil.find(ideProject, ProjectKeys.LIBRARY,
|
||||
node -> libraryName.equals(node.getData().getExternalName()));
|
||||
if (libraryData == null) {
|
||||
ideProject.createChild(ProjectKeys.LIBRARY, library);
|
||||
return true;
|
||||
}
|
||||
return libraryData.getData().equals(library);
|
||||
}
|
||||
|
||||
public static boolean isIdeaTask(final String taskName, @Nullable String group) {
|
||||
|
||||
+1
-1
@@ -450,7 +450,7 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
|
||||
List<LibraryOrderEntry> unresolvableDep = getModuleLibDeps("project_main", "Gradle: some:unresolvable-lib:0.1");
|
||||
assertEquals(1, unresolvableDep.size());
|
||||
LibraryOrderEntry unresolvableEntry = unresolvableDep.iterator().next();
|
||||
assertFalse(unresolvableEntry.isModuleLevel());
|
||||
assertTrue(unresolvableEntry.isModuleLevel());
|
||||
assertEquals(DependencyScope.COMPILE, unresolvableEntry.getScope());
|
||||
String[] unresolvableEntryUrls = unresolvableEntry.getUrls(OrderRootType.CLASSES);
|
||||
assertEquals(1, unresolvableEntryUrls.length);
|
||||
|
||||
Reference in New Issue
Block a user