gradle: fix module groups
authorVladislav.Soroka <Vladislav.Soroka@jetbrains.com>
Mon, 7 Dec 2015 10:41:32 +0000 (13:41 +0300)
committerVladislav.Soroka <Vladislav.Soroka@jetbrains.com>
Mon, 7 Dec 2015 10:46:20 +0000 (13:46 +0300)
java/java-impl/src/com/intellij/externalSystem/JavaProjectDataService.java
platform/external-system-api/src/com/intellij/openapi/externalSystem/util/ExternalSystemApiUtil.java
platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/AbstractModuleDataService.java
platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ProjectDataServiceImpl.java
plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java

index 7a51aec785eb71cc074c83b7c27ce4faae2599d7..303c32367c8e8601aef5381f667a75b70dfe06ed 100644 (file)
@@ -66,7 +66,7 @@ public class JavaProjectDataService extends AbstractProjectDataService<JavaProje
     final DataNode<ProjectData> projectDataNode = ExternalSystemApiUtil.findParent(javaProjectDataNode, ProjectKeys.PROJECT);
 
     assert projectDataNode != null;
-    if (!ExternalSystemApiUtil.isOneToOneMapping(project, projectDataNode)) {
+    if (!ExternalSystemApiUtil.isOneToOneMapping(project, projectDataNode.getData())) {
       return;
     }
 
index e7a6fbbd303179ec0dd23a4ce654224230ba81ec..2c50199efa22649b18ed8436c8451ef95281b96f 100644 (file)
@@ -598,11 +598,11 @@ public class ExternalSystemApiUtil {
    * ide project if it doesn't completely corresponds to the given ide project then.
    *
    * @param ideProject       target ide project
-   * @param externalProject  target external project
+   * @param projectData      target external project
    * @return                 <code>true</code> if given ide project has 1-1 mapping to the given external project;
    *                         <code>false</code> otherwise
    */
-  public static boolean isOneToOneMapping(@NotNull Project ideProject, @NotNull DataNode<ProjectData> externalProject) {
+  public static boolean isOneToOneMapping(@NotNull Project ideProject, @NotNull ProjectData projectData) {
     String linkedExternalProjectPath = null;
     for (ExternalSystemManager<?, ?, ?, ?, ?> manager : getAllManagers()) {
       ProjectSystemId externalSystemId = manager.getSystemId();
@@ -624,7 +624,6 @@ public class ExternalSystemApiUtil {
       }
     }
 
-    ProjectData projectData = externalProject.getData();
     if (linkedExternalProjectPath != null && !linkedExternalProjectPath.equals(projectData.getLinkedExternalProjectPath())) {
       // New external project is being linked.
       return false;
index 81847f1ed9a2d001e0675d00448fe1b482f75d16..c63b86c46f4f98fd2de6c41e326280b5b065dee4 100644 (file)
@@ -45,7 +45,10 @@ import com.intellij.pom.java.LanguageLevel;
 import com.intellij.ui.CheckBoxList;
 import com.intellij.ui.IdeBorderFactory;
 import com.intellij.ui.components.JBScrollPane;
-import com.intellij.util.*;
+import com.intellij.util.ArrayUtil;
+import com.intellij.util.Consumer;
+import com.intellij.util.Function;
+import com.intellij.util.SmartList;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.containers.ContainerUtilRt;
 import org.jetbrains.annotations.NotNull;
@@ -82,13 +85,23 @@ public abstract class AbstractModuleDataService<E extends ModuleData> extends Ab
     if (!toCreate.isEmpty()) {
       createModules(toCreate, modelsProvider, project);
     }
+
+    final boolean isOneToOneMapping = projectData != null && ExternalSystemApiUtil.isOneToOneMapping(project, projectData);
+
     for (DataNode<E> node : toImport) {
       Module module = node.getUserData(MODULE_KEY);
       if (module != null) {
         setModuleOptions(module, node);
 
         final ModifiableModuleModel modifiableModel = modelsProvider.getModifiableModuleModel();
-        modifiableModel.setModuleGroupPath(module, node.getData().getIdeModuleGroup());
+        final String[] groupPath;
+        if (isOneToOneMapping || node.getData().getIdeModuleGroup() == null || projectData == null) {
+          groupPath = node.getData().getIdeModuleGroup();
+        }
+        else {
+          groupPath = ArrayUtil.prepend(projectData.getInternalName() + " modules", node.getData().getIdeModuleGroup());
+        }
+        modifiableModel.setModuleGroupPath(module, groupPath);
         ModifiableRootModel modifiableRootModel = modelsProvider.getModifiableRootModel(module);
         syncPaths(module, modifiableRootModel, node.getData());
         setLanguageLevel(modifiableRootModel, node.getData());
@@ -104,7 +117,7 @@ public abstract class AbstractModuleDataService<E extends ModuleData> extends Ab
       final Module created = modelsProvider.newModule(data.getModuleFilePath(), data.getModuleTypeId());
       module.putUserData(MODULE_KEY, created);
       Set<String> orphanFiles = project.getUserData(ORPHAN_MODULE_FILES);
-      if(orphanFiles != null) {
+      if (orphanFiles != null) {
         orphanFiles.remove(created.getModuleFilePath());
       }
 
@@ -342,7 +355,7 @@ public abstract class AbstractModuleDataService<E extends ModuleData> extends Ab
   @Override
   public void onSuccessImport(@NotNull Project project) {
     final Set<String> orphanFiles = project.getUserData(ORPHAN_MODULE_FILES);
-    if(orphanFiles != null && !orphanFiles.isEmpty()) {
+    if (orphanFiles != null && !orphanFiles.isEmpty()) {
       ExternalSystemApiUtil.executeOnEdt(false, new Runnable() {
         @Override
         public void run() {
index c2771de88ec3419b42fbc037c9db0b38f9c37eee..3a2f24feca56c5304f2901246612e7d0526e6e9c 100644 (file)
@@ -59,7 +59,7 @@ public class ProjectDataServiceImpl extends AbstractProjectDataService<ProjectDa
     DataNode<ProjectData> node = toImport.iterator().next();
     assert projectData == node.getData();
 
-    if (!ExternalSystemApiUtil.isOneToOneMapping(project, node)) {
+    if (!ExternalSystemApiUtil.isOneToOneMapping(project, node.getData())) {
       return;
     }
     
index 9658e8f37cd2429f2d6362bf90a4f5c439962812..1d5e3270c6471818010185bcc4ff941129cb8836 100644 (file)
@@ -194,12 +194,13 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver
     final ModuleData moduleData =
       new ModuleData(mainModuleId, GradleConstants.SYSTEM_ID, StdModuleTypes.JAVA.getId(), moduleName,
                      mainModuleFileDirectoryPath, mainModuleConfigPath);
-    final String[] moduleGroup = null;
-    moduleData.setIdeModuleGroup(moduleGroup);
     DataNode<ModuleData> mainModuleNode = projectDataNode.createChild(ProjectKeys.MODULE, moduleData);
 
     ExternalProject externalProject = resolverCtx.getExtraProject(gradleModule, ExternalProject.class);
     if (externalProject != null) {
+      final String[] moduleGroup = externalProject.getSourceSets().isEmpty() ? null : new String[]{moduleData.getInternalName() + " modules"};
+      moduleData.setIdeModuleGroup(moduleGroup);
+
       moduleData.setGroup(externalProject.getGroup());
       moduleData.setVersion(externalProject.getVersion());
       moduleData.setDescription(externalProject.getDescription());