Merge branch 'leneshka/template-projects'
authorShaverdova Elena <Elena.Shaverdova@jetbrains.com>
Fri, 6 May 2016 09:51:05 +0000 (12:51 +0300)
committerShaverdova Elena <Elena.Shaverdova@jetbrains.com>
Fri, 6 May 2016 09:51:05 +0000 (12:51 +0300)
1  2 
platform/lang-impl/src/com/intellij/ide/util/projectWizard/ExistingModuleLoader.java
platform/lang-impl/src/com/intellij/platform/templates/SaveProjectAsTemplateAction.java

index cb458b2493fb401c3965ebd891bc96b458a47799,c545cca19bf14a26013ade3a5ebf27e01fc392ae..cb458b2493fb401c3965ebd891bc96b458a47799
@@@ -1,5 -1,5 +1,5 @@@
  /*
 - * Copyright 2000-2012 JetBrains s.r.o.
 + * Copyright 2000-2016 JetBrains s.r.o.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
@@@ -34,6 -34,7 +34,6 @@@ import com.intellij.openapi.roots.Modif
  import com.intellij.openapi.ui.Messages;
  import com.intellij.openapi.util.InvalidDataException;
  import com.intellij.openapi.util.JDOMUtil;
 -import org.jdom.Document;
  import org.jdom.Element;
  import org.jdom.JDOMException;
  import org.jetbrains.annotations.NotNull;
@@@ -61,7 -62,6 +61,7 @@@ public class ExistingModuleLoader exten
      return moduleLoader;
    }
  
 +  @Override
    @NotNull
    public Module createModule(@NotNull ModifiableModuleModel moduleModel)
      throws InvalidDataException, IOException, ModuleWithNameAlreadyExists, JDOMException, ConfigurationException {
      return moduleModel.loadModule(moduleFilePath);
    }
  
 +  @Override
    public void setupRootModel(ModifiableRootModel modifiableRootModel) throws ConfigurationException {
      // empty
    }
  
 +  @Override
    public ModuleType getModuleType() {
      return null; // no matter
    }
  
 +  @Override
    public boolean validate(final Project current, final Project dest) {
      if (getName() == null) return false;
      String moduleFilePath = getModuleFilePath();
@@@ -97,7 -94,8 +97,7 @@@
          if (result.openingIsCanceled()) {
            return false;
          }
 -        final Document document = JDOMUtil.loadDocument(file);
 -        final Element root = document.getRootElement();
 +        final Element root = JDOMUtil.load(file);
          final Set<String> usedMacros = PathMacrosCollector.getMacroNames(root);
          final Set<String> definedMacros = PathMacros.getInstance().getAllMacroNames();
          usedMacros.remove("$" + PathMacrosImpl.MODULE_DIR_MACRO_NAME + "$");
index 21131e5882e9f0dbad0c422d758c4c8696e49bc8,337b0aba3389cbb70f6e5e19aa9979330d07fc5a..99aea55e58a04ec774dfae286175f8cc5395393b
@@@ -1,5 -1,5 +1,5 @@@
  /*
-  * Copyright 2000-2015 JetBrains s.r.o.
+  * Copyright 2000-2016 JetBrains s.r.o.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
  package com.intellij.platform.templates;
  
  import com.intellij.CommonBundle;
- import com.intellij.codeInspection.defaultFileTemplateUsage.FileHeaderChecker;
  import com.intellij.ide.fileTemplates.FileTemplate;
  import com.intellij.ide.fileTemplates.FileTemplateManager;
+ import com.intellij.ide.fileTemplates.FileTemplateUtil;
  import com.intellij.ide.impl.ProjectUtil;
  import com.intellij.ide.util.projectWizard.ProjectTemplateFileProcessor;
  import com.intellij.ide.util.projectWizard.ProjectTemplateParameterFactory;
  import com.intellij.openapi.actionSystem.AnAction;
  import com.intellij.openapi.actionSystem.AnActionEvent;
  import com.intellij.openapi.application.ApplicationManager;
 +import com.intellij.openapi.application.WriteAction;
  import com.intellij.openapi.diagnostic.Logger;
  import com.intellij.openapi.extensions.Extensions;
  import com.intellij.openapi.module.Module;
@@@ -123,8 -122,16 +123,8 @@@ public class SaveProjectAsTemplateActio
  
      final Map<String, String> parameters = computeParameters(project, replaceParameters);
      indicator.setText("Saving project...");
 -    UIUtil.invokeAndWaitIfNeeded(new Runnable() {
 -      @Override
 -      public void run() {
 -        ApplicationManager.getApplication().runWriteAction(new Runnable() {
 -          public void run() {
 -            project.save();
 -          }
 -        });
 -      }
 -    });
 +    ApplicationManager.getApplication().invokeAndWait(() -> WriteAction.run(project::save),
 +                                                      indicator.getModalityState());
      indicator.setText("Processing project files...");
      ZipOutputStream stream = null;
      try {
        stream = new ZipOutputStream(new FileOutputStream(zipFile));
  
        final VirtualFile dir = getDirectoryToSave(project, moduleToSave);
 -      writeFile(LocalArchivedTemplate.DESCRIPTION_PATH, description, project, dir, stream, true);
 +      writeFile(LocalArchivedTemplate.DESCRIPTION_PATH, description, project, dir, stream, true, indicator);
        if (replaceParameters) {
          String text = getInputFieldsText(parameters);
 -        writeFile(LocalArchivedTemplate.TEMPLATE_DESCRIPTOR, text, project, dir, stream, false);
 +        writeFile(LocalArchivedTemplate.TEMPLATE_DESCRIPTOR, text, project, dir, stream, false, indicator);
        }
  
        FileIndex index = moduleToSave == null
                      !fileName.equals(PROJECT_TEMPLATE_XML) &&
                      !fileName.equals("misc.xml") &&
                      !fileName.equals("modules.xml") &&
-                     !fileName.equals("workspace.xml")) {
+                     !fileName.equals("workspace.xml") &&
+                     !fileName.endsWith(".iml")) {
                    return true;
                  }
                }
  
    private static void writeFile(String path,
                                  final String text,
 -                                Project project, VirtualFile dir, ZipOutputStream stream, boolean overwrite) throws IOException {
 +                                Project project, VirtualFile dir, ZipOutputStream stream, boolean overwrite, ProgressIndicator indicator) throws IOException {
      final VirtualFile descriptionFile = getDescriptionFile(project, path);
      if (descriptionFile == null) {
        stream.putNextEntry(new ZipEntry(dir.getName() + "/" + path));
        stream.closeEntry();
      }
      else if (overwrite) {
 -      UIUtil.invokeAndWaitIfNeeded(new Runnable() {
 -        public void run() {
 -          ApplicationManager.getApplication().runWriteAction(new Runnable() {
 -            @Override
 -            public void run() {
 -              try {
 -                VfsUtil.saveText(descriptionFile, text);
 -              }
 -              catch (IOException e) {
 -                LOG.error(e);
 -              }
 -            }
 -          });
 +      ApplicationManager.getApplication().invokeAndWait(() -> WriteAction.run(() -> {
 +        try {
 +          VfsUtil.saveText(descriptionFile, text);
          }
 -      });
 +        catch (IOException e) {
 +          LOG.error(e);
 +        }
 +      }), indicator.getModalityState());
      }
    }
  
      String text = VfsUtilCore.loadText(virtualFile);
      final FileTemplate template = FileTemplateManager.getInstance(project).getDefaultTemplate(FileTemplateManager.FILE_HEADER_TEMPLATE_NAME);
      final String templateText = template.getText();
-     final Pattern pattern = FileHeaderChecker.getTemplatePattern(template, project, new TIntObjectHashMap<String>());
+     final Pattern pattern = FileTemplateUtil.getTemplatePattern(template, project, new TIntObjectHashMap<String>());
      String result = convertTemplates(text, pattern, templateText);
      result = ProjectTemplateFileProcessor.encodeFile(result, virtualFile, project);
      for (Map.Entry<String, String> entry : parameters.entrySet()) {
    }
  
    private static String getInputFieldsText(Map<String, String> parameters) {
-     Element element = new Element(RemoteTemplatesFactory.TEMPLATE);
+     Element element = new Element(ArchivedProjectTemplate.TEMPLATE);
      for (Map.Entry<String, String> entry : parameters.entrySet()) {
        Element field = new Element(ArchivedProjectTemplate.INPUT_FIELD);
        field.setText(entry.getValue());
-       field.setAttribute(RemoteTemplatesFactory.INPUT_DEFAULT, entry.getKey());
+       field.setAttribute(ArchivedProjectTemplate.INPUT_DEFAULT, entry.getKey());
        element.addContent(field);
      }
      return JDOMUtil.writeElement(element);