From 6f11c52b5619b5cf2691243cf8b6828661fe2cf6 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Sat, 23 Jul 2016 15:16:56 -0700 Subject: [PATCH] Don't try to resolve smali type references when in dumb mode --- .../java/org/jf/smalidea/util/NameUtils.java | 5 +++++ .../org/jf/smalidea/ClassReferenceTest.java | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/smalidea/src/main/java/org/jf/smalidea/util/NameUtils.java b/smalidea/src/main/java/org/jf/smalidea/util/NameUtils.java index 305c7f8a..47cb08ca 100644 --- a/smalidea/src/main/java/org/jf/smalidea/util/NameUtils.java +++ b/smalidea/src/main/java/org/jf/smalidea/util/NameUtils.java @@ -32,6 +32,7 @@ package org.jf.smalidea.util; import com.google.common.collect.ImmutableMap; +import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.impl.ResolveScopeManager; @@ -129,6 +130,10 @@ public class NameUtils { public static PsiClass resolveSmaliType(@NotNull Project project, @NotNull GlobalSearchScope scope, @NotNull String smaliType) { + if (DumbService.isDumb(project)) { + return null; + } + JavaPsiFacade facade = JavaPsiFacade.getInstance(project); String javaType = NameUtils.smaliToJavaType(smaliType); diff --git a/smalidea/src/test/java/org/jf/smalidea/ClassReferenceTest.java b/smalidea/src/test/java/org/jf/smalidea/ClassReferenceTest.java index 05f3b1be..9d61bf02 100644 --- a/smalidea/src/test/java/org/jf/smalidea/ClassReferenceTest.java +++ b/smalidea/src/test/java/org/jf/smalidea/ClassReferenceTest.java @@ -31,6 +31,7 @@ package org.jf.smalidea; +import com.intellij.openapi.project.DumbServiceImpl; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.psi.JavaResolveResult; @@ -66,6 +67,24 @@ public class ClassReferenceTest extends ResolveTestCase { 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 Ljava/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 */ @@ -105,6 +124,8 @@ public class ClassReferenceTest extends ResolveTestCase { Assert.assertEquals("blarg", smaliClass.getQualifiedName()); } + + @Override protected Sdk getTestProjectJdk() { return JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk();