diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java index e24c40dbfe32..5bd1c20a0b1e 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveJavaMemberHandler.java @@ -180,7 +180,7 @@ public class MoveJavaMemberHandler implements MoveMemberHandler { } else { final PsiReferenceParameterList parameterList = refExpr.getParameterList(); - if (parameterList != null && parameterList.getTypeArguments().length == 0){ + if (parameterList != null && parameterList.getTypeArguments().length == 0 && !(refExpr instanceof PsiMethodReferenceExpression)){ refExpr.setQualifierExpression(null); } else { final Project project = element.getProject(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java index 94cce501d521..2209efe4141b 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java @@ -22,7 +22,6 @@ import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.impl.PsiManagerEx; -import com.intellij.psi.impl.source.resolve.JavaResolveUtil; import com.intellij.psi.impl.source.resolve.ResolveCache; import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil; import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession; @@ -45,7 +44,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Map; @@ -228,7 +226,7 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase @Override public void setQualifierExpression(@Nullable PsiExpression newQualifier) throws IncorrectOperationException { if (newQualifier == null) { - super.setQualifierExpression(newQualifier); + LOG.error("Forbidden null qualifier"); return; } final PsiExpression expression = getQualifierExpression(); diff --git a/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/after/Outer.java b/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/after/Outer.java new file mode 100644 index 000000000000..aafb683292a0 --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/after/Outer.java @@ -0,0 +1,10 @@ +class Outer { + static void foo() {} + + static class Inner { + } + + { + Runnable r = Outer::foo; + } +} diff --git a/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/before/Outer.java b/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/before/Outer.java new file mode 100644 index 000000000000..ae82c7498fff --- /dev/null +++ b/java/java-tests/testData/refactoring/moveMembers/fromNestedToOuterMethodRef/before/Outer.java @@ -0,0 +1,9 @@ +class Outer { + static class Inner { + static void foo() {} + } + + { + Runnable r = Inner::foo; + } +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java b/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java index 83e8fa10aed9..b34486fcf110 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/MoveMembersTest.java @@ -187,6 +187,18 @@ public class MoveMembersTest extends MultiFileTestCase { doTest("Outer.Inner", "Outer", true, VisibilityUtil.ESCALATE_VISIBILITY, 0); } + public void testFromNestedToOuterMethodRef() throws Exception { + final LanguageLevelProjectExtension projectExtension = LanguageLevelProjectExtension.getInstance(getProject()); + final LanguageLevel oldLevel = projectExtension.getLanguageLevel(); + try { + projectExtension.setLanguageLevel(LanguageLevel.HIGHEST); + doTest("Outer.Inner", "Outer", true, VisibilityUtil.ESCALATE_VISIBILITY, 0); + } + finally { + projectExtension.setLanguageLevel(oldLevel); + } + } + @NotNull @Override protected String getTestRoot() {