diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenAttachSourcesProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenAttachSourcesProvider.java index aa49f9a7314e..d3626a01be41 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenAttachSourcesProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenAttachSourcesProvider.java @@ -15,18 +15,28 @@ */ package org.jetbrains.idea.maven.utils; +import com.intellij.codeEditor.JavaEditorFileSwapper; import com.intellij.codeInsight.AttachSourcesProvider; import com.intellij.notification.Notification; import com.intellij.notification.NotificationType; import com.intellij.notification.Notifications; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.LibraryOrderEntry; import com.intellij.openapi.roots.OrderEntry; +import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.AsyncResult; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtilCore; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.util.Consumer; +import com.intellij.util.PathUtil; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.importing.MavenRootModelAdapter; @@ -37,10 +47,13 @@ import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; import org.jetbrains.idea.maven.project.ProjectBundle; +import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class MavenAttachSourcesProvider implements AttachSourcesProvider { @Override @@ -108,6 +121,22 @@ public class MavenAttachSourcesProvider implements AttachSourcesProvider { resultWrapper.setRejected(); } else { + List files = orderEntries.stream() + .flatMap(entry -> entry.getLibrary() != null ? + Stream.of(entry.getLibrary().getUrls(OrderRootType.SOURCES)) : + Stream.empty()) + .map(url -> new File(PathUtil.getLocalPath(VfsUtilCore.urlToPath(url)))) + .collect(Collectors.toList()); + + if(!files.isEmpty()) { + LocalFileSystem.getInstance().refreshIoFiles(files, true, false, () -> { + Project project = psiFile.getProject(); + final VirtualFile sourceFile = JavaEditorFileSwapper.findSourceFile(project, psiFile.getVirtualFile()); + if (sourceFile != null) { + FileEditorManager.getInstance(project).openTextEditor(new OpenFileDescriptor(project, sourceFile), true); + } + }); + } resultWrapper.setDone(); } }