diff options
author | Ben Gruver <bgruv@google.com> | 2017-03-21 21:59:33 -0700 |
---|---|---|
committer | Ben Gruver <bgruv@google.com> | 2017-03-21 22:03:42 -0700 |
commit | a15fc84ace690365ad55b66c98b27ffa7c35f1e6 (patch) | |
tree | cdca090339e8a8eeaf34a4d798b123c49cdd6d29 | |
parent | fa13b13bbddcf795a41aa5cd8323a2d6c7d718c3 (diff) | |
download | smali-a15fc84ace690365ad55b66c98b27ffa7c35f1e6.tar.gz |
Add missing read actions in SmaliPositionManager
-rw-r--r-- | smalidea/src/main/java/org/jf/smalidea/debugging/SmaliPositionManager.java | 23 |
1 files 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<SmaliClass> classes = SmaliClassNameIndex.INSTANCE.get(declaringType, - debugProcess.getProject(), GlobalSearchScope.projectScope(debugProcess.getProject())); + + Collection<SmaliClass> classes = ApplicationManager.getApplication().runReadAction( + new Computable<Collection<SmaliClass>>() { + @Override public Collection<SmaliClass> 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<Location> locationsOfLine(@NotNull final ReferenceType type, @NotNull final SourcePosition position) throws NoDataException { - if (!(position.getElementAt().getContainingFile() instanceof SmaliFile)) { + PsiFile containingFile = ApplicationManager.getApplication().runReadAction(new Computable<PsiFile>() { + @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<SmaliClass> classes = SmaliClassNameIndex.INSTANCE.get(typeName, debugProcess.getProject(), GlobalSearchScope.projectScope(debugProcess.getProject())); |