mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
store alternative source map in project user data
This commit is contained in:
@@ -27,6 +27,7 @@ import com.intellij.execution.filters.LineNumbersMapping;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.ThreeState;
|
||||
import com.intellij.xdebugger.frame.XStackFrame;
|
||||
import com.sun.jdi.InternalException;
|
||||
@@ -98,10 +99,12 @@ public class CompoundPositionManager extends PositionManagerEx implements MultiR
|
||||
}
|
||||
|
||||
private static boolean checkCacheEntry(SourcePosition position, Location location) {
|
||||
if (position == null || !position.getFile().isValid()) return false;
|
||||
String url = DebuggerUtilsEx.getAlternativeSourceUrl(location.declaringType().name());
|
||||
if (position == null) return false;
|
||||
PsiFile psiFile = position.getFile();
|
||||
if (!psiFile.isValid()) return false;
|
||||
String url = DebuggerUtilsEx.getAlternativeSourceUrl(location.declaringType().name(), psiFile.getProject());
|
||||
if (url == null) return true;
|
||||
VirtualFile file = position.getFile().getVirtualFile();
|
||||
VirtualFile file = psiFile.getVirtualFile();
|
||||
return file != null && url.equals(file.getUrl());
|
||||
}
|
||||
|
||||
|
||||
@@ -133,7 +133,8 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio
|
||||
return null;
|
||||
}
|
||||
|
||||
PsiFile psiFile = getPsiFileByLocation(getDebugProcess().getProject(), location);
|
||||
Project project = getDebugProcess().getProject();
|
||||
PsiFile psiFile = getPsiFileByLocation(project, location);
|
||||
if(psiFile == null ) {
|
||||
return null;
|
||||
}
|
||||
@@ -149,7 +150,7 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio
|
||||
}
|
||||
|
||||
// replace file with alternative
|
||||
String altFileUrl = DebuggerUtilsEx.getAlternativeSourceUrl(location.declaringType().name());
|
||||
String altFileUrl = DebuggerUtilsEx.getAlternativeSourceUrl(location.declaringType().name(), project);
|
||||
if (altFileUrl != null) {
|
||||
VirtualFile altFile = VirtualFileManager.getInstance().findFileByUrl(altFileUrl);
|
||||
if (altFile != null) {
|
||||
|
||||
@@ -49,7 +49,6 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.*;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.pom.Navigatable;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
|
||||
@@ -705,15 +704,21 @@ public abstract class DebuggerUtilsEx extends DebuggerUtils {
|
||||
return text.replace("\t", StringUtil.repeat(" ", tabSize));
|
||||
}
|
||||
|
||||
private static final Map<String, String> ourAlternativeSources = new ConcurrentHashMap<String, String>();
|
||||
private static final Key<Map<String, String>> DEBUGGER_ALTERNATIVE_SOURCE_MAPPING = Key.create("DEBUGGER_ALTERNATIVE_SOURCE_MAPPING");
|
||||
|
||||
public static void setAlternativeSourceUrl(String className, String source) {
|
||||
ourAlternativeSources.put(className, source);
|
||||
public static void setAlternativeSourceUrl(String className, String source, Project project) {
|
||||
Map<String, String> map = project.getUserData(DEBUGGER_ALTERNATIVE_SOURCE_MAPPING);
|
||||
if (map == null) {
|
||||
map = new ConcurrentHashMap<String, String>();
|
||||
project.putUserData(DEBUGGER_ALTERNATIVE_SOURCE_MAPPING, map);
|
||||
}
|
||||
map.put(className, source);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static String getAlternativeSourceUrl(@Nullable String className) {
|
||||
return ourAlternativeSources.get(className);
|
||||
public static String getAlternativeSourceUrl(@Nullable String className, Project project) {
|
||||
Map<String, String> map = project.getUserData(DEBUGGER_ALTERNATIVE_SOURCE_MAPPING);
|
||||
return map != null ? map.get(className) : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
+1
-1
@@ -179,7 +179,7 @@ public class AlternativeSourceNotificationProvider extends EditorNotifications.P
|
||||
if (location != null) {
|
||||
VirtualFile vFile = item.getContainingFile().getVirtualFile();
|
||||
if (vFile != null) {
|
||||
DebuggerUtilsEx.setAlternativeSourceUrl(location.declaringType().name(), vFile.getUrl());
|
||||
DebuggerUtilsEx.setAlternativeSourceUrl(location.declaringType().name(), vFile.getUrl(), project);
|
||||
}
|
||||
}
|
||||
DebuggerUIUtil.invokeLater(new Runnable() {
|
||||
|
||||
Reference in New Issue
Block a user