From a15fc84ace690365ad55b66c98b27ffa7c35f1e6 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Tue, 21 Mar 2017 21:59:33 -0700 Subject: [PATCH] Add missing read actions in SmaliPositionManager --- .../debugging/SmaliPositionManager.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliPositionManager.java b/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliPositionManager.java index 781a8569..9c0abbe6 100644 --- a/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliPositionManager.java +++ b/smalidea/src/main/java/org/jf/smalidea/debugging/SmaliPositionManager.java @@ -38,6 +38,7 @@ import com.intellij.debugger.engine.DebugProcess; import com.intellij.debugger.requests.ClassPrepareRequestor; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.util.Computable; +import com.intellij.psi.PsiFile; import com.intellij.psi.search.GlobalSearchScope; import com.sun.jdi.Location; import com.sun.jdi.ReferenceType; @@ -60,10 +61,16 @@ public class SmaliPositionManager implements PositionManager { this.debugProcess = debugProcess; } - public SourcePosition getSourcePosition(String declaringType, String methodName, String methodSignature, + public SourcePosition getSourcePosition(final String declaringType, String methodName, String methodSignature, int codeIndex) throws NoDataException { - Collection classes = SmaliClassNameIndex.INSTANCE.get(declaringType, - debugProcess.getProject(), GlobalSearchScope.projectScope(debugProcess.getProject())); + + Collection classes = ApplicationManager.getApplication().runReadAction( + new Computable>() { + @Override public Collection compute() { + return SmaliClassNameIndex.INSTANCE.get(declaringType, debugProcess.getProject(), + GlobalSearchScope.projectScope(debugProcess.getProject())); + } + }); if (classes.size() > 0) { SmaliClass smaliClass = classes.iterator().next(); @@ -116,7 +123,13 @@ public class SmaliPositionManager implements PositionManager { @Override @NotNull public List locationsOfLine(@NotNull final ReferenceType type, @NotNull final SourcePosition position) throws NoDataException { - if (!(position.getElementAt().getContainingFile() instanceof SmaliFile)) { + PsiFile containingFile = ApplicationManager.getApplication().runReadAction(new Computable() { + @Override public PsiFile compute() { + return position.getElementAt().getContainingFile(); + } + }); + + if (!(containingFile instanceof SmaliFile)) { throw NoDataException.INSTANCE; } @@ -125,6 +138,8 @@ public class SmaliPositionManager implements PositionManager { ApplicationManager.getApplication().runReadAction(new Runnable() { @Override public void run() { + + String typeName = type.name(); Collection classes = SmaliClassNameIndex.INSTANCE.get(typeName, debugProcess.getProject(), GlobalSearchScope.projectScope(debugProcess.getProject()));