IDEA-158073 'Download sources' link should open source file after download

This commit is contained in:
Vladislav.Soroka
2016-08-15 14:42:23 +03:00
parent d77d314769
commit 54e0e1740f
@@ -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<File> 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();
}
}