gradle: support qualified module names

This commit is contained in:
Vladislav.Soroka
2017-03-01 16:57:13 +03:00
parent d478dc9ee4
commit d8fb34205f
4 changed files with 57 additions and 31 deletions
@@ -17,6 +17,7 @@ package com.intellij.openapi.externalSystem.service.project;
import com.intellij.openapi.externalSystem.model.project.*;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleGrouperKt;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.Project;
@@ -87,16 +88,17 @@ public class IdeModelsProviderImpl implements IdeModelsProvider {
protected String[] suggestModuleNameCandidates(@NotNull ModuleData module) {
String prefix = module.getGroup();
File modulePath = new File(module.getLinkedExternalProjectPath());
if(modulePath.isFile()) {
if (modulePath.isFile()) {
modulePath = modulePath.getParentFile();
}
if (modulePath.getParentFile() != null) {
prefix = modulePath.getParentFile().getName();
}
char delimiter = ModuleGrouperKt.isQualifiedModuleNamesEnabled() ? '.' : '_';
return new String[]{
module.getInternalName(),
prefix + '-' + module.getInternalName(),
prefix + '-' + module.getInternalName() + "~1"};
prefix + delimiter + module.getInternalName(),
prefix + delimiter + module.getInternalName() + "~1"};
}
private static boolean isApplicableIdeModule(@NotNull ModuleData moduleData, @NotNull Module ideModule) {
@@ -34,10 +34,7 @@ import com.intellij.openapi.externalSystem.service.notification.NotificationData
import com.intellij.openapi.externalSystem.service.notification.NotificationSource;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.Order;
import com.intellij.openapi.module.EmptyModuleType;
import com.intellij.openapi.module.JavaModuleType;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.StdModuleTypes;
import com.intellij.openapi.module.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.DependencyScope;
import com.intellij.openapi.util.Pair;
@@ -175,21 +172,18 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
ExternalProject externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject.class);
if (resolverCtx.isResolveModulePerSourceSet() && externalProject != null) {
String gradlePath = gradleModule.getGradleProject().getPath();
final boolean isRootModule = StringUtil.isEmpty(gradlePath) || ":".equals(gradlePath);
final String[] moduleGroup;
if (isRootModule) {
moduleGroup = new String[]{mainModuleData.getInternalName()};
String[] moduleGroup = null;
if (!ModuleGrouperKt.isQualifiedModuleNamesEnabled()) {
String gradlePath = gradleModule.getGradleProject().getPath();
final boolean isRootModule = StringUtil.isEmpty(gradlePath) || ":".equals(gradlePath);
moduleGroup = isRootModule ? new String[]{mainModuleData.getInternalName()} : ArrayUtil.remove(gradlePath.split(":"), 0);
mainModuleData.setIdeModuleGroup(isRootModule ? null : moduleGroup);
}
else {
moduleGroup = ArrayUtil.remove(gradlePath.split(":"), 0);
}
mainModuleData.setIdeModuleGroup(isRootModule ? null : moduleGroup);
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, sourceSet.getName());
final String moduleInternalName = getInternalModuleName(gradleModule, externalProject, sourceSet.getName());
GradleSourceSetData sourceSetData = new GradleSourceSetData(
moduleId, moduleExternalName, moduleInternalName, mainModuleFileDirectoryPath, mainModuleConfigPath);
@@ -218,7 +212,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
}
else {
if ("test".equals(sourceSet.getName())) {
sourceSetData.setProductionModuleId(getInternalModuleName(gradleModule, "main"));
sourceSetData.setProductionModuleId(getInternalModuleName(gradleModule, externalProject, "main"));
final Set<File> testsArtifacts = externalProject.getArtifactsByConfiguration().get("tests");
if (testsArtifacts != null) {
artifacts.addAll(testsArtifacts);
@@ -260,11 +254,6 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
return mainModuleNode;
}
@NotNull
private static String getInternalModuleName(@NotNull IdeaModule gradleModule, @NotNull String sourceSetName) {
return PathUtilRt.suggestFileName(gradleModule.getName() + "_" + sourceSetName, true, false);
}
@Override
public void populateModuleExtraModels(@NotNull IdeaModule gradleModule, @NotNull DataNode<ModuleData> ideModule) {
final BuildScriptClasspathModel buildScriptClasspathModel = resolverCtx.getExtraProject(gradleModule, BuildScriptClasspathModel.class);
@@ -29,6 +29,7 @@ import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotifica
import com.intellij.openapi.externalSystem.service.project.ExternalSystemProjectResolver;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemDebugEnvironment;
import com.intellij.openapi.module.ModuleGrouperKt;
import com.intellij.openapi.module.StdModuleTypes;
import com.intellij.openapi.roots.DependencyScope;
import com.intellij.openapi.util.Factory;
@@ -866,15 +867,16 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
if (paths.contains(moduleNode.getData().getLinkedExternalProjectPath())) continue;
resultProjectDataNode.addChild(moduleNode);
if (!ModuleGrouperKt.isQualifiedModuleNamesEnabled()) {
// adjust ide module group
final ModuleData moduleData = moduleNode.getData();
if (moduleData.getIdeModuleGroup() != null) {
String[] moduleGroup = ArrayUtil.prepend(resultProjectDataNode.getData().getInternalName(), moduleData.getIdeModuleGroup());
moduleData.setIdeModuleGroup(moduleGroup);
// adjust ide module group
final ModuleData moduleData = moduleNode.getData();
if (moduleData.getIdeModuleGroup() != null) {
String[] moduleGroup = ArrayUtil.prepend(resultProjectDataNode.getData().getInternalName(), moduleData.getIdeModuleGroup());
moduleData.setIdeModuleGroup(moduleGroup);
for (DataNode<GradleSourceSetData> sourceSetNode : ExternalSystemApiUtil.getChildren(moduleNode, GradleSourceSetData.KEY)) {
sourceSetNode.getData().setIdeModuleGroup(moduleGroup);
for (DataNode<GradleSourceSetData> sourceSetNode : ExternalSystemApiUtil.getChildren(moduleNode, GradleSourceSetData.KEY)) {
sourceSetNode.getData().setIdeModuleGroup(moduleGroup);
}
}
}
}
@@ -25,11 +25,13 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemConstants;
import com.intellij.openapi.externalSystem.util.ExternalSystemDebugEnvironment;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleGrouperKt;
import com.intellij.openapi.module.StdModuleTypes;
import com.intellij.openapi.roots.DependencyScope;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.PathUtilRt;
import com.intellij.util.containers.ContainerUtil;
import org.gradle.api.artifacts.Dependency;
import org.gradle.tooling.model.GradleProject;
@@ -100,6 +102,7 @@ public class GradleProjectResolverUtil {
ExternalProject externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject.class);
if (externalProject != null) {
moduleData.setInternalName(getInternalModuleName(gradleModule, externalProject));
moduleData.setGroup(externalProject.getGroup());
moduleData.setVersion(externalProject.getVersion());
moduleData.setDescription(externalProject.getDescription());
@@ -111,6 +114,36 @@ public class GradleProjectResolverUtil {
return projectDataNode.createChild(ProjectKeys.MODULE, moduleData);
}
@NotNull
static String getInternalModuleName(@NotNull IdeaModule gradleModule, @NotNull ExternalProject externalProject) {
return getInternalModuleName(gradleModule, externalProject, null);
}
@NotNull
static String getInternalModuleName(@NotNull IdeaModule gradleModule,
@NotNull ExternalProject externalProject,
@Nullable String sourceSetName) {
String delimiter;
StringBuilder moduleName = new StringBuilder();
if (ModuleGrouperKt.isQualifiedModuleNamesEnabled()) {
delimiter = ".";
if (StringUtil.isNotEmpty(externalProject.getGroup())) {
moduleName.append(externalProject.getGroup()).append(delimiter);
}
moduleName.append(externalProject.getName());
}
else {
delimiter = "_";
moduleName.append(gradleModule.getName());
}
if (sourceSetName != null) {
assert !sourceSetName.isEmpty();
moduleName.append(delimiter);
moduleName.append(sourceSetName);
}
return PathUtilRt.suggestFileName(moduleName.toString(), true, false);
}
@NotNull
public static String getModuleConfigPath(@NotNull ProjectResolverContext resolverCtx,
@NotNull IdeaModule gradleModule,