Debugger: add module info to key for type mapper in JetPositionManager
This commit is contained in:
@@ -27,6 +27,7 @@ import com.intellij.openapi.application.ApplicationManager;
|
|||||||
import com.intellij.openapi.project.DumbService;
|
import com.intellij.openapi.project.DumbService;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
||||||
|
import com.intellij.openapi.util.Pair;
|
||||||
import com.intellij.openapi.util.Ref;
|
import com.intellij.openapi.util.Ref;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
@@ -56,6 +57,7 @@ import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils;
|
|||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.types.lang.InlineStrategy;
|
import org.jetbrains.jet.lang.types.lang.InlineStrategy;
|
||||||
import org.jetbrains.jet.lang.types.lang.InlineUtil;
|
import org.jetbrains.jet.lang.types.lang.InlineUtil;
|
||||||
|
import org.jetbrains.jet.plugin.caches.resolve.IdeaModuleInfo;
|
||||||
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
|
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
|
||||||
import org.jetbrains.jet.plugin.codeInsight.CodeInsightUtils;
|
import org.jetbrains.jet.plugin.codeInsight.CodeInsightUtils;
|
||||||
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
|
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies;
|
||||||
@@ -69,7 +71,7 @@ import static org.jetbrains.jet.plugin.stubindex.PackageIndexUtil.findFilesWithE
|
|||||||
|
|
||||||
public class JetPositionManager implements PositionManager {
|
public class JetPositionManager implements PositionManager {
|
||||||
private final DebugProcess myDebugProcess;
|
private final DebugProcess myDebugProcess;
|
||||||
private final WeakHashMap<FqName, CachedValue<JetTypeMapper>> myTypeMappers = new WeakHashMap<FqName, CachedValue<JetTypeMapper>>();
|
private final WeakHashMap<Pair<FqName, IdeaModuleInfo>, CachedValue<JetTypeMapper>> myTypeMappers = new WeakHashMap<Pair<FqName, IdeaModuleInfo>, CachedValue<JetTypeMapper>>();
|
||||||
|
|
||||||
public JetPositionManager(DebugProcess debugProcess) {
|
public JetPositionManager(DebugProcess debugProcess) {
|
||||||
myDebugProcess = debugProcess;
|
myDebugProcess = debugProcess;
|
||||||
@@ -312,15 +314,16 @@ public class JetPositionManager implements PositionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private JetTypeMapper prepareTypeMapper(final JetFile file) {
|
private JetTypeMapper prepareTypeMapper(final JetFile file) {
|
||||||
final FqName fqName = file.getPackageFqName();
|
final Pair<FqName, IdeaModuleInfo> key = createKeyForTypeMapper(file);
|
||||||
CachedValue<JetTypeMapper> value = myTypeMappers.get(fqName);
|
|
||||||
|
CachedValue<JetTypeMapper> value = myTypeMappers.get(key);
|
||||||
if(value == null) {
|
if(value == null) {
|
||||||
value = CachedValuesManager.getManager(file.getProject()).createCachedValue(new CachedValueProvider<JetTypeMapper>() {
|
value = CachedValuesManager.getManager(file.getProject()).createCachedValue(new CachedValueProvider<JetTypeMapper>() {
|
||||||
@Override
|
@Override
|
||||||
public Result<JetTypeMapper> compute() {
|
public Result<JetTypeMapper> compute() {
|
||||||
Project project = file.getProject();
|
Project project = file.getProject();
|
||||||
GlobalSearchScope packageFacadeScope = ResolvePackage.getModuleInfo(file).contentScope();
|
GlobalSearchScope packageFacadeScope = key.second.contentScope();
|
||||||
Collection<JetFile> packageFiles = findFilesWithExactPackage(fqName, packageFacadeScope, project);
|
Collection<JetFile> packageFiles = findFilesWithExactPackage(key.first, packageFacadeScope, project);
|
||||||
|
|
||||||
AnalyzeExhaust analyzeExhaust = ResolvePackage.getAnalysisResultsForElements(packageFiles);
|
AnalyzeExhaust analyzeExhaust = ResolvePackage.getAnalysisResultsForElements(packageFiles);
|
||||||
analyzeExhaust.throwIfError();
|
analyzeExhaust.throwIfError();
|
||||||
@@ -333,7 +336,8 @@ public class JetPositionManager implements PositionManager {
|
|||||||
return new Result<JetTypeMapper>(state.getTypeMapper(), PsiModificationTracker.MODIFICATION_COUNT);
|
return new Result<JetTypeMapper>(state.getTypeMapper(), PsiModificationTracker.MODIFICATION_COUNT);
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
myTypeMappers.put(fqName, value);
|
|
||||||
|
myTypeMappers.put(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return value.getValue();
|
return value.getValue();
|
||||||
@@ -373,14 +377,15 @@ public class JetPositionManager implements PositionManager {
|
|||||||
|
|
||||||
@TestOnly
|
@TestOnly
|
||||||
public void addTypeMapper(JetFile file, final JetTypeMapper typeMapper) {
|
public void addTypeMapper(JetFile file, final JetTypeMapper typeMapper) {
|
||||||
FqName fqName = file.getPackageFqName();
|
|
||||||
CachedValue<JetTypeMapper> value = CachedValuesManager.getManager(file.getProject()).createCachedValue(new CachedValueProvider<JetTypeMapper>() {
|
CachedValue<JetTypeMapper> value = CachedValuesManager.getManager(file.getProject()).createCachedValue(new CachedValueProvider<JetTypeMapper>() {
|
||||||
@Override
|
@Override
|
||||||
public Result<JetTypeMapper> compute() {
|
public Result<JetTypeMapper> compute() {
|
||||||
return new Result<JetTypeMapper>(typeMapper, PsiModificationTracker.MODIFICATION_COUNT);
|
return new Result<JetTypeMapper>(typeMapper, PsiModificationTracker.MODIFICATION_COUNT);
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
myTypeMappers.put(fqName, value);
|
|
||||||
|
Pair<FqName, IdeaModuleInfo> key = createKeyForTypeMapper(file);
|
||||||
|
myTypeMappers.put(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -428,4 +433,8 @@ public class JetPositionManager implements PositionManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Pair<FqName, IdeaModuleInfo> createKeyForTypeMapper(@NotNull JetFile file) {
|
||||||
|
return new Pair<FqName, IdeaModuleInfo>(file.getPackageFqName(), ResolvePackage.getModuleInfo(file));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user