don't recognize ref on functional interface outside of control stmts

IDEA-193833
This commit is contained in:
Anna Kozlova
2018-06-13 19:38:56 +03:00
parent 771034a880
commit 38f7fc11b6
2 changed files with 16 additions and 1 deletions
@@ -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 &&
@@ -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 = ()<caret> -> {};\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 = () -> {};}}");