From baa13dac162e09c5e75befce07162e3b53282d7f Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 11 Mar 2013 14:49:12 +0100 Subject: [PATCH] introduce variable: suggest method reference expression (IDEA-102852) --- .../introduceVariable/IntroduceVariableBase.java | 7 ++++--- .../introduceVariable/MethodReferenceExpr.after.java | 9 +++++++++ .../introduceVariable/MethodReferenceExpr.java | 8 ++++++++ .../com/intellij/refactoring/IntroduceVariableTest.java | 4 ++++ 4 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/refactoring/introduceVariable/MethodReferenceExpr.after.java create mode 100644 java/java-tests/testData/refactoring/introduceVariable/MethodReferenceExpr.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java index 09f26a481790..58121af1a764 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java @@ -197,9 +197,10 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase { PsiExpression expression = PsiTreeUtil.getParentOfType(elementAtCaret, PsiExpression.class); while (expression != null) { if (!expressions.contains(expression) && !(expression instanceof PsiParenthesizedExpression) && !(expression instanceof PsiSuperExpression) && expression.getType() != PsiType.VOID) { - if (!(expression instanceof PsiReferenceExpression && (expression.getParent() instanceof PsiMethodCallExpression || - ((PsiReferenceExpression)expression).resolve() instanceof PsiClass)) - && !(expression instanceof PsiAssignmentExpression)) { + if (expression instanceof PsiMethodReferenceExpression || + !(expression instanceof PsiReferenceExpression && + (expression.getParent() instanceof PsiMethodCallExpression || ((PsiReferenceExpression)expression).resolve() instanceof PsiClass)) && + !(expression instanceof PsiAssignmentExpression)) { expressions.add(expression); } } diff --git a/java/java-tests/testData/refactoring/introduceVariable/MethodReferenceExpr.after.java b/java/java-tests/testData/refactoring/introduceVariable/MethodReferenceExpr.after.java new file mode 100644 index 000000000000..ab64e391e4f4 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/MethodReferenceExpr.after.java @@ -0,0 +1,9 @@ +class Foo { + interface I { + Integer[] _(int p); + } + void test() { + I m = Integer[]::new; + I i = m; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceVariable/MethodReferenceExpr.java b/java/java-tests/testData/refactoring/introduceVariable/MethodReferenceExpr.java new file mode 100644 index 000000000000..c54ea341469e --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/MethodReferenceExpr.java @@ -0,0 +1,8 @@ +class Foo { + interface I { + Integer[] _(int p); + } + void test() { + I i = Integer[]::new; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java index 631e0c9468c6..eff899fb422d 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -392,6 +392,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { doTest(new MockIntroduceVariableHandler("i3", false, false, false, "int")); } + public void testMethodReferenceExpr() throws Exception { + doTest(new MockIntroduceVariableHandler("m", false, false, false, "Foo.I")); + } + private void doTest(IntroduceVariableBase testMe) throws Exception { @NonNls String baseName = "/refactoring/introduceVariable/" + getTestName(false); configureByFile(baseName + ".java");