From a000ad207bbb0f228ecfd7bded994af9bf2e20ca Mon Sep 17 00:00:00 2001 From: Shaverdova Elena Date: Mon, 5 Sep 2016 19:42:09 +0200 Subject: [PATCH] WI-33147 Project templates: Sometimes iml of an attached project can't be found --- .../templates/ArchivedProjectTemplate.java | 3 ++- .../templates/LocalArchivedTemplate.java | 3 ++- .../templates/TemplateModuleBuilder.java | 17 ++++++++++++----- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/platform/templates/ArchivedProjectTemplate.java b/platform/lang-impl/src/com/intellij/platform/templates/ArchivedProjectTemplate.java index 2b43d8f74bcf..40432b973b49 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/ArchivedProjectTemplate.java +++ b/platform/lang-impl/src/com/intellij/platform/templates/ArchivedProjectTemplate.java @@ -111,7 +111,8 @@ public abstract class ArchivedProjectTemplate implements ProjectTemplate { return null; } - public void handleUnzippedDirectories(File dir) throws IOException { + public void handleUnzippedDirectories(File dir, List filesToRefresh) throws IOException { + filesToRefresh.add(dir); } public static abstract class StreamProcessor { diff --git a/platform/lang-impl/src/com/intellij/platform/templates/LocalArchivedTemplate.java b/platform/lang-impl/src/com/intellij/platform/templates/LocalArchivedTemplate.java index a35db2b9cf72..d71c731cee40 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/LocalArchivedTemplate.java +++ b/platform/lang-impl/src/com/intellij/platform/templates/LocalArchivedTemplate.java @@ -195,7 +195,7 @@ public class LocalArchivedTemplate extends ArchivedProjectTemplate { } @Override - public void handleUnzippedDirectories(File dir) throws IOException { + public void handleUnzippedDirectories(File dir, List filesToRefresh) throws IOException { if (myModuleDescriptions == null) { return; } @@ -207,6 +207,7 @@ public class LocalArchivedTemplate extends ArchivedProjectTemplate { target.mkdirs(); FileUtil.copyDir(root, target); FileUtil.delete(root); + filesToRefresh.add(target); } } diff --git a/platform/lang-impl/src/com/intellij/platform/templates/TemplateModuleBuilder.java b/platform/lang-impl/src/com/intellij/platform/templates/TemplateModuleBuilder.java index 3004026073dc..467b41811fee 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/TemplateModuleBuilder.java +++ b/platform/lang-impl/src/com/intellij/platform/templates/TemplateModuleBuilder.java @@ -67,6 +67,7 @@ import org.jetbrains.jps.model.serialization.PathMacroUtil; import javax.swing.*; import java.io.File; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Properties; import java.util.zip.ZipInputStream; @@ -267,6 +268,7 @@ public class TemplateModuleBuilder extends ModuleBuilder { } ExceptionConsumer consumer = new ExceptionConsumer(); + List filesToRefresh = new ArrayList<>(); myTemplate.processStream(new ArchivedProjectTemplate.StreamProcessor() { @Override public Void consume(@NotNull ZipInputStream stream) throws IOException { @@ -283,7 +285,7 @@ public class TemplateModuleBuilder extends ModuleBuilder { } }, true); - myTemplate.handleUnzippedDirectories(dir); + myTemplate.handleUnzippedDirectories(dir, filesToRefresh); return null; } @@ -301,11 +303,16 @@ public class TemplateModuleBuilder extends ModuleBuilder { throw new IOException("Can't rename " + from + " to " + to); } } - VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(dir); - if (virtualFile == null) { - throw new IOException("Can't find " + dir); + + RefreshQueue refreshQueue = RefreshQueue.getInstance(); + LOG.assertTrue(!filesToRefresh.isEmpty()); + for (File file : filesToRefresh) { + VirtualFile virtualFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file); + if (virtualFile == null) { + throw new IOException("Can't find " + file); + } + refreshQueue.refresh(false, true, null, virtualFile); } - RefreshQueue.getInstance().refresh(false, true, null, virtualFile); consumer.reportFailures(); }