From 330156602c2e799dafb279ff0b610dc4cc0867ec Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 26 Jan 2021 15:42:00 +0100 Subject: [PATCH] java: pull up: fix qualified super reference (IDEA-248954) GitOrigin-RevId: 4fb054b73e9849a80504d65f560f7ce7af88b84c --- .../refactoring/memberPullUp/JavaPullUpHelper.java | 1 + .../refactoring/pullUp/SuperFieldReferenced.java | 9 +++++++++ .../refactoring/pullUp/SuperFieldReferenced_after.java | 10 ++++++++++ .../com/intellij/java/refactoring/PullUpTest.java | 4 ++++ 4 files changed, 24 insertions(+) create mode 100644 java/java-tests/testData/refactoring/pullUp/SuperFieldReferenced.java create mode 100644 java/java-tests/testData/refactoring/pullUp/SuperFieldReferenced_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java index a7d73f04f3ae..4579fc9d7f72 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHelper.java @@ -769,6 +769,7 @@ public class JavaPullUpHelper implements PullUpHelper { @Override public void visitReferenceExpression(PsiReferenceExpression expression) { + super.visitReferenceExpression(expression); if(expression.getQualifierExpression() instanceof PsiSuperExpression) { PsiElement resolved = expression.resolve(); if (resolved == null || resolved instanceof PsiMethod && shouldFixSuper((PsiMethod) resolved)) { diff --git a/java/java-tests/testData/refactoring/pullUp/SuperFieldReferenced.java b/java/java-tests/testData/refactoring/pullUp/SuperFieldReferenced.java new file mode 100644 index 000000000000..a7b40667d6db --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/SuperFieldReferenced.java @@ -0,0 +1,9 @@ +class Super { + public String delegate; +} + +class Inner extends Super { + public void bar() { + super.delegate.substring(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/pullUp/SuperFieldReferenced_after.java b/java/java-tests/testData/refactoring/pullUp/SuperFieldReferenced_after.java new file mode 100644 index 000000000000..02d159786a29 --- /dev/null +++ b/java/java-tests/testData/refactoring/pullUp/SuperFieldReferenced_after.java @@ -0,0 +1,10 @@ +class Super { + public String delegate; + + public void bar() { + delegate.substring(0); + } +} + +class Inner extends Super { +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java index f9b5f925053e..5e0a6cfac038 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/PullUpTest.java @@ -202,6 +202,10 @@ public class PullUpTest extends LightRefactoringTestCase { doTest(false, new RefactoringTestUtil.MemberDescriptor("bar", PsiMethod.class, true)); } + public void testSuperFieldReferenced() { + doTest(false, new RefactoringTestUtil.MemberDescriptor("bar", PsiMethod.class, false)); + } + public void testOuterClassRefs() { doTest(false, "Method bar() uses field Outer.x, which is not moved to the superclass", new RefactoringTestUtil.MemberDescriptor("bar", PsiMethod.class)); }