lvti: goto declaration on var (IDEA-188739)

This commit is contained in:
Anna.Kozlova
2018-03-22 15:53:25 +01:00
parent f7da2f2e73
commit 520f488169
3 changed files with 28 additions and 5 deletions
@@ -2,10 +2,8 @@
package com.intellij.codeInsight.navigation.actions;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiTypeElement;
import com.intellij.psi.PsiVariable;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.Nullable;
public class GotoVarTypeHandler extends GotoDeclarationHandlerBase {
@@ -21,7 +19,12 @@ public class GotoVarTypeHandler extends GotoDeclarationHandlerBase {
}
}
}
else if (elementAt instanceof PsiKeyword && PsiKeyword.VAR.equals(elementAt.getText())) {
PsiElement parent = elementAt.getParent();
if (parent instanceof PsiTypeElement && ((PsiTypeElement)parent).isInferredType()) {
return PsiUtil.resolveClassInClassTypeOnly(((PsiTypeElement)parent).getType());
}
}
return null;
}
}
@@ -0,0 +1,5 @@
class WithVar {
{
v<caret>ar a = "";
}
}
@@ -2,10 +2,14 @@
package com.intellij.java.codeInsight.daemon;
import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase;
import com.intellij.codeInsight.navigation.actions.GotoDeclarationAction;
import com.intellij.codeInspection.AnonymousCanBeLambdaInspection;
import com.intellij.openapi.projectRoots.JavaSdkVersion;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.CommonClassNames;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.testFramework.IdeaTestUtil;
public class LightAdvLVTIHighlightingTest extends LightDaemonAnalyzerTestCase {
@@ -38,6 +42,17 @@ public class LightAdvLVTIHighlightingTest extends LightDaemonAnalyzerTestCase {
doTest();
}
public void testGotoDeclarationOnVar() {
configureByFile(BASE_PATH + "/" + getTestName(false) + ".java");
final int offset = getEditor().getCaretModel().getOffset();
final PsiElement[] elements =
GotoDeclarationAction.findAllTargetElements(getProject(), getEditor(), offset);
assertSize(1, elements);
PsiElement element = elements[0];
assertInstanceOf(element, PsiClass.class);
assertEquals(CommonClassNames.JAVA_LANG_STRING, ((PsiClass)element).getQualifiedName());
}
@Override
protected Sdk getProjectJDK() {
return IdeaTestUtil.getMockJdk9();