diff options
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.java | 51 |
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 |