Exemple #1
0
  @NotNull
  public static Project loadProject(File projectFile) {
    if (!projectFile.exists()) {
      throw new RuntimeException("Can't find project file " + projectFile.getAbsolutePath());
    }

    final ProjectManagerEx projectManager = ProjectManagerEx.getInstanceEx();

    final String filePath = projectFile.getAbsolutePath();

    // this is a workaround for MPS-8840
    final com.intellij.openapi.project.Project[] project =
        new com.intellij.openapi.project.Project[1];

    ThreadUtils.runInUIThreadAndWait(
        new Runnable() {
          public void run() {
            try {
              project[0] = projectManager.loadAndOpenProject(filePath, false);
            } catch (IOException e) {
              throw new RuntimeException(e);
            } catch (JDOMException e) {
              throw new RuntimeException(e);
            } catch (InvalidDataException e) {
              throw new RuntimeException(e);
            }
          }
        });

    if (project[0] == null) {
      // this actually happens
      throw new RuntimeException(
          "ProjectManager could not load project from " + projectFile.getAbsolutePath());
    }

    ModelAccess.instance()
        .runReadAction(
            new Runnable() {
              public void run() {
                new ModuleMaker()
                    .make(
                        new LinkedHashSet<IModule>(
                            MPSModuleRepository.getInstance().getAllModules()),
                        new EmptyProgressMonitor());
              }
            });

    projectManager.openProject(project[0]);
    return project[0].getComponent(MPSProject.class);
  }