mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-87399 quick fix if resource class is unresolved, navigate to resource from any place inside R.<class>.<field> reference
This commit is contained in:
@@ -54,7 +54,19 @@ public class AndroidGotoDeclarationHandler implements GotoDeclarationHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
final Pair<String, String> pair = AndroidResourceUtil.getReferredResourceField(facet, refExp);
|
||||
Pair<String, String> pair = AndroidResourceUtil.getReferredResourceField(facet, refExp);
|
||||
if (pair == null) {
|
||||
PsiElement parent = refExp.getParent();
|
||||
if (parent instanceof PsiReferenceExpression) {
|
||||
pair = AndroidResourceUtil.getReferredResourceField(facet, (PsiReferenceExpression)parent);
|
||||
}
|
||||
if (pair == null) {
|
||||
parent = parent.getParent();
|
||||
if (parent instanceof PsiReferenceExpression) {
|
||||
pair = AndroidResourceUtil.getReferredResourceField(facet, (PsiReferenceExpression)parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (pair == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.intellij.codeInsight.quickfix.UnresolvedReferenceQuickFixProvider;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiReferenceExpression;
|
||||
import org.jetbrains.android.dom.manifest.Manifest;
|
||||
@@ -44,7 +45,13 @@ public class AndroidQuickFixProvider extends UnresolvedReferenceQuickFixProvider
|
||||
return;
|
||||
}
|
||||
|
||||
final Pair<String, String> pair = AndroidResourceUtil.getReferredResourceField(facet, exp);
|
||||
Pair<String, String> pair = AndroidResourceUtil.getReferredResourceField(facet, exp);
|
||||
if (pair == null) {
|
||||
final PsiElement parent = exp.getParent();
|
||||
if (parent instanceof PsiReferenceExpression) {
|
||||
pair = AndroidResourceUtil.getReferredResourceField(facet, (PsiReferenceExpression)parent);
|
||||
}
|
||||
}
|
||||
if (pair == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
class Java {
|
||||
public void g() {
|
||||
int[] ar = R<caret>.styleable.Dec1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
class Java {
|
||||
public void g() {
|
||||
int[] ar = <caret>R.styleable.Dec1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
class Java {
|
||||
public void g() {
|
||||
int[] ar = R.styleable<caret>.Dec1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package p1.p2;
|
||||
|
||||
class Java {
|
||||
public void g() {
|
||||
int[] ar = R.style<caret>able.Dec1;
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,9 @@ package org.jetbrains.android;
|
||||
import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.xml.XmlAttributeValue;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -10,7 +13,8 @@ import java.io.IOException;
|
||||
* @author Eugene.Kudelevsky
|
||||
*/
|
||||
public class AndroidResourcesLineMarkerTest extends AndroidTestCase {
|
||||
public void test1() {}
|
||||
public void test1() {
|
||||
}
|
||||
|
||||
private static final String BASE_PATH = "/resNavigation/";
|
||||
|
||||
@@ -26,41 +30,60 @@ public class AndroidResourcesLineMarkerTest extends AndroidTestCase {
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation1() throws Exception {
|
||||
doJavaFileNavigationTest(1, true);
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation2() throws Exception {
|
||||
doJavaFileNavigationTest(3, true);
|
||||
doJavaFileNavigationTest(3, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation3() throws Exception {
|
||||
doJavaFileNavigationTest(2, true);
|
||||
doJavaFileNavigationTest(2, true, PsiFile.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation4() throws Exception {
|
||||
doJavaFileNavigationTest(0, false);
|
||||
doJavaFileNavigationTest(0, false, null);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation5() throws Exception {
|
||||
doJavaFileNavigationTest(1, true);
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation6() throws Exception {
|
||||
doJavaFileNavigationTest(1, true);
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation7() throws Exception {
|
||||
doJavaFileNavigationTest(1, true);
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
private void doJavaFileNavigationTest(int expectedTargets, boolean expectedEnabled) throws IOException {
|
||||
public void testJavaFileNavigation8() throws Exception {
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation9() throws Exception {
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation10() throws Exception {
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
public void testJavaFileNavigation11() throws Exception {
|
||||
doJavaFileNavigationTest(1, true, XmlAttributeValue.class);
|
||||
}
|
||||
|
||||
private void doJavaFileNavigationTest(int expectedTargets,
|
||||
boolean expectedEnabled,
|
||||
@Nullable Class<? extends PsiElement> targetElementClass)
|
||||
throws IOException {
|
||||
copyRJava();
|
||||
String path = "src/p1/p2/" + getTestName(false) + ".java";
|
||||
doJavaFileNavigationTest(path, path, expectedTargets, expectedEnabled, true);
|
||||
doJavaFileNavigationTest(path, path, expectedTargets, expectedEnabled, true, targetElementClass);
|
||||
}
|
||||
|
||||
private void doJavaFileNavigationTest(String srcPath, String destPath, int expectedTargets, boolean expectedEnabled,
|
||||
boolean testGotoDeclaration) throws IOException {
|
||||
boolean testGotoDeclaration, Class<? extends PsiElement> targetElementClass) throws IOException {
|
||||
VirtualFile file = myFixture.copyFileToProject(BASE_PATH + srcPath, destPath);
|
||||
myFixture.configureFromExistingVirtualFile(file);
|
||||
|
||||
@@ -69,6 +92,10 @@ public class AndroidResourcesLineMarkerTest extends AndroidTestCase {
|
||||
PsiElement[] targets = GotoDeclarationAction.findAllTargetElements(getProject(), myFixture.getEditor(), myFixture.getCaretOffset());
|
||||
assertNotNull(targets);
|
||||
assertEquals(expectedTargets, targets.length);
|
||||
|
||||
for (PsiElement target : targets) {
|
||||
assertInstanceOf(target, targetElementClass);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user