mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
psi file leak
This commit is contained in:
@@ -26,6 +26,7 @@ import com.intellij.execution.runners.ProgramRunner;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -60,6 +61,7 @@ public class DefaultDebugEnvironment implements DebugEnvironment {
|
||||
mySearchScope = createSearchScope(project, runProfile);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static GlobalSearchScope createSearchScope(Project project, RunProfile runProfile) {
|
||||
Module[] modules = null;
|
||||
if (runProfile instanceof ModuleRunProfile) {
|
||||
|
||||
+4
-2
@@ -17,6 +17,7 @@ package com.intellij.execution.filters;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
@@ -26,6 +27,7 @@ import com.intellij.psi.search.GlobalSearchScope;
|
||||
*/
|
||||
public interface ExceptionFilterFactory {
|
||||
ExtensionPointName<ExceptionFilterFactory> EP_NAME = ExtensionPointName.create("com.intellij.exceptionFilter");
|
||||
|
||||
Filter create(final GlobalSearchScope searchScope);
|
||||
|
||||
@NotNull
|
||||
Filter create(@NotNull GlobalSearchScope searchScope);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.execution.filters;
|
||||
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -30,9 +31,10 @@ public class ExceptionFilters {
|
||||
private ExceptionFilters() {
|
||||
}
|
||||
|
||||
public static List<Filter> getFilters(final GlobalSearchScope searchScope) {
|
||||
List<Filter> filters = new ArrayList<Filter>();
|
||||
@NotNull
|
||||
public static List<Filter> getFilters(@NotNull GlobalSearchScope searchScope) {
|
||||
ExceptionFilterFactory[] extensions = ExceptionFilterFactory.EP_NAME.getExtensions();
|
||||
List<Filter> filters = new ArrayList<Filter>(extensions.length);
|
||||
for (ExceptionFilterFactory extension : extensions) {
|
||||
filters.add(extension.create(searchScope));
|
||||
}
|
||||
|
||||
+2
-1
@@ -40,6 +40,7 @@ import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.SmartList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
@@ -57,7 +58,7 @@ public class VcsContentAnnotationExceptionFilter implements Filter, FilterMixin
|
||||
private final VcsContentAnnotationSettings mySettings;
|
||||
private Map<VirtualFile,VcsRevisionNumber> myRevNumbersCache;
|
||||
|
||||
public VcsContentAnnotationExceptionFilter(GlobalSearchScope scope) {
|
||||
public VcsContentAnnotationExceptionFilter(@NotNull GlobalSearchScope scope) {
|
||||
myScope = scope;
|
||||
myProject = scope.getProject();
|
||||
mySettings = VcsContentAnnotationSettings.getInstance(myProject);
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.PsiShortNamesCache;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.awt.*;
|
||||
@@ -44,8 +45,7 @@ public class ExceptionWorker {
|
||||
private static final String AT_PREFIX = AT + " ";
|
||||
private static final String STANDALONE_AT = " " + AT + " ";
|
||||
|
||||
private static final TextAttributes HYPERLINK_ATTRIBUTES = EditorColorsManager
|
||||
.getInstance().getGlobalScheme().getAttributes(CodeInsightColors.HYPERLINK_ATTRIBUTES);
|
||||
private static final TextAttributes HYPERLINK_ATTRIBUTES = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(CodeInsightColors.HYPERLINK_ATTRIBUTES);
|
||||
|
||||
private final Project myProject;
|
||||
private final GlobalSearchScope mySearchScope;
|
||||
@@ -55,7 +55,7 @@ public class ExceptionWorker {
|
||||
private String myMethod;
|
||||
private Trinity<TextRange, TextRange, TextRange> myInfo;
|
||||
|
||||
public ExceptionWorker(Project project, final GlobalSearchScope searchScope) {
|
||||
public ExceptionWorker(@NotNull Project project, @NotNull GlobalSearchScope searchScope) {
|
||||
myProject = project;
|
||||
mySearchScope = searchScope;
|
||||
}
|
||||
@@ -104,35 +104,7 @@ public class ExceptionWorker {
|
||||
final int highlightEndOffset = textStartOffset + rparenthIndex;
|
||||
final VirtualFile virtualFile = myFile.getVirtualFile();
|
||||
|
||||
HyperlinkInfo linkInfo = new HyperlinkInfo() {
|
||||
@Override
|
||||
public void navigate(Project project) {
|
||||
VirtualFile currentVirtualFile = null;
|
||||
|
||||
AccessToken accessToken = ReadAction.start();
|
||||
|
||||
try {
|
||||
if (!virtualFile.isValid()) return;
|
||||
|
||||
PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
|
||||
if (psiFile != null) {
|
||||
PsiElement navigationElement = psiFile.getNavigationElement(); // Sources may be downloaded.
|
||||
if (navigationElement instanceof PsiFile) {
|
||||
currentVirtualFile = ((PsiFile)navigationElement).getVirtualFile();
|
||||
}
|
||||
}
|
||||
|
||||
if (currentVirtualFile == null) {
|
||||
currentVirtualFile = virtualFile;
|
||||
}
|
||||
}
|
||||
finally {
|
||||
accessToken.finish();
|
||||
}
|
||||
|
||||
new OpenFileHyperlinkInfo(myProject, currentVirtualFile, lineNumber - 1).navigate(project);
|
||||
}
|
||||
};
|
||||
HyperlinkInfo linkInfo = new MyHyperlinkInfo(myProject, virtualFile, lineNumber);
|
||||
|
||||
TextAttributes attributes = HYPERLINK_ATTRIBUTES.clone();
|
||||
if (!ProjectRootManager.getInstance(myProject).getFileIndex().isInContent(virtualFile)) {
|
||||
@@ -226,4 +198,44 @@ public class ExceptionWorker {
|
||||
}
|
||||
return pos;
|
||||
}
|
||||
|
||||
private static class MyHyperlinkInfo implements HyperlinkInfo {
|
||||
private final VirtualFile myVirtualFile;
|
||||
private final int myLineNumber;
|
||||
private final Project myProject;
|
||||
|
||||
public MyHyperlinkInfo(@NotNull Project project, @NotNull VirtualFile virtualFile, int lineNumber) {
|
||||
myProject = project;
|
||||
myVirtualFile = virtualFile;
|
||||
myLineNumber = lineNumber;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void navigate(Project project) {
|
||||
VirtualFile currentVirtualFile = null;
|
||||
|
||||
AccessToken accessToken = ReadAction.start();
|
||||
|
||||
try {
|
||||
if (!myVirtualFile.isValid()) return;
|
||||
|
||||
PsiFile psiFile = PsiManager.getInstance(project).findFile(myVirtualFile);
|
||||
if (psiFile != null) {
|
||||
PsiElement navigationElement = psiFile.getNavigationElement(); // Sources may be downloaded.
|
||||
if (navigationElement instanceof PsiFile) {
|
||||
currentVirtualFile = ((PsiFile)navigationElement).getVirtualFile();
|
||||
}
|
||||
}
|
||||
|
||||
if (currentVirtualFile == null) {
|
||||
currentVirtualFile = myVirtualFile;
|
||||
}
|
||||
}
|
||||
finally {
|
||||
accessToken.finish();
|
||||
}
|
||||
|
||||
new OpenFileHyperlinkInfo(myProject, currentVirtualFile, myLineNumber - 1).navigate(project);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user