Don't try to resolve smali type references when in dumb mode

This commit is contained in:
Ben Gruver 2016-07-23 15:16:56 -07:00
parent f8f4e32240
commit 6f11c52b56
2 changed files with 26 additions and 0 deletions

View File

@ -32,6 +32,7 @@
package org.jf.smalidea.util; package org.jf.smalidea.util;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.*; import com.intellij.psi.*;
import com.intellij.psi.impl.ResolveScopeManager; import com.intellij.psi.impl.ResolveScopeManager;
@ -129,6 +130,10 @@ public class NameUtils {
public static PsiClass resolveSmaliType(@NotNull Project project, @NotNull GlobalSearchScope scope, public static PsiClass resolveSmaliType(@NotNull Project project, @NotNull GlobalSearchScope scope,
@NotNull String smaliType) { @NotNull String smaliType) {
if (DumbService.isDumb(project)) {
return null;
}
JavaPsiFacade facade = JavaPsiFacade.getInstance(project); JavaPsiFacade facade = JavaPsiFacade.getInstance(project);
String javaType = NameUtils.smaliToJavaType(smaliType); String javaType = NameUtils.smaliToJavaType(smaliType);

View File

@ -31,6 +31,7 @@
package org.jf.smalidea; package org.jf.smalidea;
import com.intellij.openapi.project.DumbServiceImpl;
import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl;
import com.intellij.psi.JavaResolveResult; import com.intellij.psi.JavaResolveResult;
@ -66,6 +67,24 @@ public class ClassReferenceTest extends ResolveTestCase {
Assert.assertEquals("java.lang.Object", ((PsiClass)resolveResults[0].getElement()).getQualifiedName()); Assert.assertEquals("java.lang.Object", ((PsiClass)resolveResults[0].getElement()).getQualifiedName());
} }
/**
* Test a reference to a java class from a smali class, while in dumb mode
*/
public void testJavaReferenceFromSmaliInDumbMode() throws Exception {
SmaliClassTypeElement typeElement = (SmaliClassTypeElement)configureByFileText(
".class public Lblah; .super L<ref>java/lang/Object;", "blah.smali");
Assert.assertNotNull(typeElement);
Assert.assertEquals("Object", typeElement.getName());
DumbServiceImpl.getInstance(getProject()).setDumb(true);
PsiClass psiClass = typeElement.resolve();
Assert.assertNull(psiClass);
DumbServiceImpl.getInstance(getProject()).setDumb(false);
}
/** /**
* Test a reference to a smali class from a smali class * Test a reference to a smali class from a smali class
*/ */
@ -105,6 +124,8 @@ public class ClassReferenceTest extends ResolveTestCase {
Assert.assertEquals("blarg", smaliClass.getQualifiedName()); Assert.assertEquals("blarg", smaliClass.getQualifiedName());
} }
@Override @Override
protected Sdk getTestProjectJdk() { protected Sdk getTestProjectJdk() {
return JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); return JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk();