Debugger: add module info to key for type mapper in JetPositionManager

This commit is contained in:
Natalia Ukhorskaya
2014-11-14 13:59:34 +03:00
parent 321e758451
commit 7f56c815fb
@@ -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));
}
} }