From 38f7fc11b6ed9692f74e08b20e45b5a0fce99a85 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 13 Jun 2018 16:22:31 +0300 Subject: [PATCH] don't recognize ref on functional interface outside of control stmts IDEA-193833 --- .../codeInsight/JavaTargetElementEvaluator.java | 3 ++- .../navigation/ShowImplementationHandlerTest.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java b/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java index c21abe930d06..efa9821ba818 100644 --- a/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java +++ b/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java @@ -112,7 +112,8 @@ public class JavaTargetElementEvaluator extends TargetElementEvaluatorEx2 implem final PsiElement element = file.findElementAt(offset); if (element != null) { final PsiElement parent = element.getParent(); - if (parent instanceof PsiFunctionalExpression) { + if (parent instanceof PsiFunctionalExpression && + (PsiUtil.isJavaToken(element, JavaTokenType.ARROW) || PsiUtil.isJavaToken(element, JavaTokenType.DOUBLE_COLON))) { refElement = PsiUtil.resolveClassInType(((PsiFunctionalExpression)parent).getFunctionalInterfaceType()); } else if (element instanceof PsiKeyword && diff --git a/java/java-tests/testSrc/com/intellij/java/navigation/ShowImplementationHandlerTest.java b/java/java-tests/testSrc/com/intellij/java/navigation/ShowImplementationHandlerTest.java index 946f6ded8ef9..cbd0a199f4f6 100644 --- a/java/java-tests/testSrc/com/intellij/java/navigation/ShowImplementationHandlerTest.java +++ b/java/java-tests/testSrc/com/intellij/java/navigation/ShowImplementationHandlerTest.java @@ -53,6 +53,20 @@ public class ShowImplementationHandlerTest extends JavaCodeInsightFixtureTestCas assertEquals(CommonClassNames.JAVA_LANG_RUNNABLE, qualifiedName); } + public void testDisableFunctionalInterfaceReferenceOnWhitespacesInside() { + PsiFile file = myFixture.addFileToProject("Foo.java", "public abstract class Hello {" + + " {" + + " Runnable r = () -> {};\n" + + " }\n" + + "}\n" + + "\n"); + myFixture.configureFromExistingVirtualFile(file.getVirtualFile()); + + final PsiElement element = + TargetElementUtil.findTargetElement(myFixture.getEditor(), TargetElementUtil.getInstance().getAllAccepted()); + assertNull(element); + } + public void testFunctionExpressionsOnReference() { myFixture.addClass("public interface I {void m();}"); myFixture.addClass("public class Usage {{I i = () -> {};}}");