diff --git a/java/java-impl/src/com/intellij/codeInsight/navigation/actions/GotoVarTypeHandler.java b/java/java-impl/src/com/intellij/codeInsight/navigation/actions/GotoVarTypeHandler.java index f2858d22f7d3..02b6edc57edf 100644 --- a/java/java-impl/src/com/intellij/codeInsight/navigation/actions/GotoVarTypeHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/navigation/actions/GotoVarTypeHandler.java @@ -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; } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/GotoDeclarationOnVar.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/GotoDeclarationOnVar.java new file mode 100644 index 000000000000..f44c438cea1e --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advLVTI/GotoDeclarationOnVar.java @@ -0,0 +1,5 @@ +class WithVar { + { + var a = ""; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java index 6fe3f9df32ed..5f615c543683 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/LightAdvLVTIHighlightingTest.java @@ -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();