From 257ca8c15792f061384f0257eb7e8a324005be04 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 18 Feb 2017 19:28:38 +0100 Subject: [PATCH] InternetAttachSourceProvider: display dialogs outside write action (EA-97211 - assert: NoSwingUnderWriteAction.lambda$watchForEvents$) --- .../InternetAttachSourceProvider.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/java/idea-ui/src/com/intellij/jarFinder/InternetAttachSourceProvider.java b/java/idea-ui/src/com/intellij/jarFinder/InternetAttachSourceProvider.java index a26a2b14a2c1..d1e5a36ca5f1 100644 --- a/java/idea-ui/src/com/intellij/jarFinder/InternetAttachSourceProvider.java +++ b/java/idea-ui/src/com/intellij/jarFinder/InternetAttachSourceProvider.java @@ -193,21 +193,25 @@ public class InternetAttachSourceProvider extends AbstractAttachSourceProvider { } public static void attachSourceJar(@NotNull File sourceJar, @NotNull Collection libraries) { + VirtualFile srcFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(sourceJar); + if (srcFile == null) return; + + VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(srcFile); + if (jarRoot == null) return; + + VirtualFile[] roots = LibrarySourceRootDetectorUtil.scanAndSelectDetectedJavaSourceRoots(null, new VirtualFile[]{jarRoot}); + if (roots.length == 0) { + roots = new VirtualFile[]{jarRoot}; + } + + doAttachSourceJars(libraries, roots); + } + + private static void doAttachSourceJars(@NotNull Collection libraries, VirtualFile[] roots) { WriteAction.run(() -> { - VirtualFile srcFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(sourceJar); - if (srcFile == null) return; - - VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(srcFile); - if (jarRoot == null) return; - - VirtualFile[] roots = LibrarySourceRootDetectorUtil.scanAndSelectDetectedJavaSourceRoots(null, new VirtualFile[]{jarRoot}); - if (roots.length == 0) { - roots = new VirtualFile[]{jarRoot}; - } - for (Library library : libraries) { Library.ModifiableModel model = library.getModifiableModel(); - List alreadyExistingFiles = Arrays.asList(model.getFiles(OrderRootType.SOURCES)); + Set alreadyExistingFiles = ContainerUtil.newHashSet(model.getFiles(OrderRootType.SOURCES)); for (VirtualFile root : roots) { if (!alreadyExistingFiles.contains(root)) {