summaryrefslogtreecommitdiff
path: root/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ProjectImportAction.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ProjectImportAction.java')
-rw-r--r--plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ProjectImportAction.java51
1 files changed, 32 insertions, 19 deletions
diff --git a/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ProjectImportAction.java b/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ProjectImportAction.java
index af6f4fed60f4..5b20894b318d 100644
--- a/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ProjectImportAction.java
+++ b/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ProjectImportAction.java
@@ -48,8 +48,8 @@ public class ProjectImportAction implements BuildAction<ProjectImportAction.AllM
@Nullable
@Override
public AllModels execute(final BuildController controller) {
- Class<? extends IdeaProject> aClass1 = myIsPreviewMode ? BasicIdeaProject.class : IdeaProject.class;
- final IdeaProject ideaProject = controller.getModel(aClass1);
+ //outer conditional is needed to be compatible with 1.8
+ final IdeaProject ideaProject = myIsPreviewMode ? controller.getModel(BasicIdeaProject.class) : controller.getModel(IdeaProject.class);
if (ideaProject == null || ideaProject.getModules().isEmpty()) {
return null;
}
@@ -59,25 +59,30 @@ public class ProjectImportAction implements BuildAction<ProjectImportAction.AllM
// TODO ask gradle guys why there is always null got for BuildEnvironment model
//allModels.setBuildEnvironment(controller.findModel(BuildEnvironment.class));
+ addExtraProject(controller, allModels, null);
for (IdeaModule module : ideaProject.getModules()) {
- for (Class aClass : myExtraProjectModelClasses) {
- try {
- Object extraProject = controller.findModel(module, aClass);
- if (extraProject == null) continue;
- allModels.addExtraProject(extraProject, aClass, module);
- }
- catch (Exception e) {
- // do not fail project import in a preview mode
- if (!myIsPreviewMode) {
- throw new ExternalSystemException(e);
- }
- }
- }
+ addExtraProject(controller, allModels, module);
}
return allModels;
}
+ private void addExtraProject(@NotNull BuildController controller, @NotNull AllModels allModels, @Nullable IdeaModule model) {
+ for (Class aClass : myExtraProjectModelClasses) {
+ try {
+ Object extraProject = controller.findModel(model, aClass);
+ if (extraProject == null) continue;
+ allModels.addExtraProject(extraProject, aClass, model);
+ }
+ catch (Exception e) {
+ // do not fail project import in a preview mode
+ if (!myIsPreviewMode) {
+ throw new ExternalSystemException(e);
+ }
+ }
+ }
+ }
+
public static class AllModels implements Serializable {
@NotNull private final Map<String, Object> projectsByPath = new HashMap<String, Object>();
@NotNull private final IdeaProject myIdeaProject;
@@ -101,9 +106,13 @@ public class ProjectImportAction implements BuildAction<ProjectImportAction.AllM
myBuildEnvironment = buildEnvironment;
}
+ @Nullable
+ public <T> T getExtraProject(Class<T> modelClazz) {
+ return getExtraProject(null, modelClazz);
+ }
@Nullable
- public <T> T getExtraProject(@NotNull IdeaModule module, Class<T> modelClazz) {
+ public <T> T getExtraProject(@Nullable IdeaModule module, Class<T> modelClazz) {
Object extraProject = projectsByPath.get(extractMapKey(modelClazz, module));
if (modelClazz.isInstance(extraProject)) {
//noinspection unchecked
@@ -129,13 +138,17 @@ public class ProjectImportAction implements BuildAction<ProjectImportAction.AllM
return modules;
}
- public void addExtraProject(@NotNull Object project, @NotNull Class modelClazz, @NotNull IdeaModule module) {
+ public void addExtraProject(@NotNull Object project, @NotNull Class modelClazz) {
+ projectsByPath.put(extractMapKey(modelClazz, null), project);
+ }
+
+ public void addExtraProject(@NotNull Object project, @NotNull Class modelClazz, @Nullable IdeaModule module) {
projectsByPath.put(extractMapKey(modelClazz, module), project);
}
@NotNull
- private static String extractMapKey(Class modelClazz, @NotNull IdeaModule module) {
- return modelClazz.getName() + '@' + module.getGradleProject().getPath();
+ private String extractMapKey(Class modelClazz, @Nullable IdeaModule module) {
+ return modelClazz.getName() + '@' + (module != null ? module.getGradleProject().getPath() : "root" + myIdeaProject.getName().hashCode());
}
@NotNull