aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gruver <bgruv@google.com>2017-03-21 21:59:33 -0700
committerBen Gruver <bgruv@google.com>2017-03-21 22:03:42 -0700
commita15fc84ace690365ad55b66c98b27ffa7c35f1e6 (patch)
treecdca090339e8a8eeaf34a4d798b123c49cdd6d29
parentfa13b13bbddcf795a41aa5cd8323a2d6c7d718c3 (diff)
downloadsmali-a15fc84ace690365ad55b66c98b27ffa7c35f1e6.tar.gz
Add missing read actions in SmaliPositionManager
-rw-r--r--smalidea/src/main/java/org/jf/smalidea/debugging/SmaliPositionManager.java23
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()));