IDEA-150835: Provide an API which tells which production module corresponding to...
[idea/community.git] / platform / external-system-impl / src / com / intellij / openapi / externalSystem / service / project / manage / AbstractModuleDataService.java
index c63b86c46f4f98fd2de6c41e326280b5b065dee4..60c9d7d4e7b626c6b74de7d43f08f1ecfa008ec9 100644 (file)
@@ -86,25 +86,32 @@ public abstract class AbstractModuleDataService<E extends ModuleData> extends Ab
       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);
+        ModifiableRootModel modifiableRootModel = modelsProvider.getModifiableRootModel(module);
+        syncPaths(module, modifiableRootModel, node.getData());
+        setLanguageLevel(modifiableRootModel, node.getData());
+      }
+    }
 
-        final ModifiableModuleModel modifiableModel = modelsProvider.getModifiableModuleModel();
+    final boolean isOneToOneMapping = projectData != null && ExternalSystemApiUtil.isOneToOneMapping(project, projectData);
+    for (DataNode<E> node : toImport) {
+      Module module = node.getUserData(MODULE_KEY);
+      if (module != null) {
         final String[] groupPath;
-        if (isOneToOneMapping || node.getData().getIdeModuleGroup() == null || projectData == null) {
+        if (isOneToOneMapping || projectData == null) {
           groupPath = node.getData().getIdeModuleGroup();
         }
         else {
-          groupPath = ArrayUtil.prepend(projectData.getInternalName() + " modules", node.getData().getIdeModuleGroup());
+          final String externalProjectGroup = projectData.getInternalName() + " modules";
+          groupPath = node.getData().getIdeModuleGroup() == null
+                      ? new String[]{externalProjectGroup}
+                      : ArrayUtil.prepend(externalProjectGroup, node.getData().getIdeModuleGroup());
         }
+        final ModifiableModuleModel modifiableModel = modelsProvider.getModifiableModuleModel();
         modifiableModel.setModuleGroupPath(module, groupPath);
-        ModifiableRootModel modifiableRootModel = modelsProvider.getModifiableRootModel(module);
-        syncPaths(module, modifiableRootModel, node.getData());
-        setLanguageLevel(modifiableRootModel, node.getData());
       }
     }
   }
@@ -116,6 +123,10 @@ public abstract class AbstractModuleDataService<E extends ModuleData> extends Ab
       ModuleData data = module.getData();
       final Module created = modelsProvider.newModule(data.getModuleFilePath(), data.getModuleTypeId());
       module.putUserData(MODULE_KEY, created);
+      String productionModuleId = data.getProductionModuleId();
+      if (productionModuleId != null) {
+        modelsProvider.setTestModuleProperties(created, productionModuleId);
+      }
       Set<String> orphanFiles = project.getUserData(ORPHAN_MODULE_FILES);
       if (orphanFiles != null) {
         orphanFiles.remove(created.getModuleFilePath());