From d9822e4d4fd5ecb3387dadd7b032acae8140fe19 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Wed, 8 Aug 2018 16:34:00 +0200 Subject: [PATCH] inline super class: fix this qualifier for nested/anonymous classes in constructors (IDEA-194883) --- .../com/intellij/codeInsight/ChangeContextUtil.java | 7 +------ .../thisQualificationInsideAnonymous/after/Test.java | 10 ++++++++++ .../thisQualificationInsideAnonymous/before/Super.java | 10 ++++++++++ .../thisQualificationInsideAnonymous/before/Test.java | 4 ++++ .../java/refactoring/InlineSuperClassTest.java | 1 + 5 files changed, 26 insertions(+), 6 deletions(-) create mode 100644 java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/after/Test.java create mode 100644 java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/before/Super.java create mode 100644 java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/before/Test.java diff --git a/java/java-psi-impl/src/com/intellij/codeInsight/ChangeContextUtil.java b/java/java-psi-impl/src/com/intellij/codeInsight/ChangeContextUtil.java index fdb7e396a37f..546cb2d76df8 100644 --- a/java/java-psi-impl/src/com/intellij/codeInsight/ChangeContextUtil.java +++ b/java/java-psi-impl/src/com/intellij/codeInsight/ChangeContextUtil.java @@ -326,12 +326,7 @@ public class ChangeContextUtil { PsiThisExpression thisExpr = (PsiThisExpression)scope; if (thisExpr.getQualifier() == null){ if (thisClass instanceof PsiAnonymousClass) return null; - PsiThisExpression qualifiedThis = RefactoringChangeUtil.createThisExpression(thisClass.getManager(), thisClass); - if (thisExpr.getParent() != null) { - return thisExpr.replace(qualifiedThis); - } else { - return qualifiedThis; - } + return RefactoringChangeUtil.createThisExpression(thisClass.getManager(), thisClass); } } else if (!(scope instanceof PsiClass)){ diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/after/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/after/Test.java new file mode 100644 index 000000000000..0be9b584d7d7 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/after/Test.java @@ -0,0 +1,10 @@ +class Test { + protected final Object myBar; + protected final Object myBizz; + + public Test() { + this.myBar = new Object() { + }; + this.myBizz = null; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/before/Super.java b/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/before/Super.java new file mode 100644 index 000000000000..128e1bf5e6fa --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/before/Super.java @@ -0,0 +1,10 @@ + class Super { + protected final Object myBar; + protected final Object myBizz; + + protected Super() { + myBar = new Object() { + }; + myBizz = null; + } +} diff --git a/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/before/Test.java b/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/before/Test.java new file mode 100644 index 000000000000..a08031d688a3 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineSuperClass/thisQualificationInsideAnonymous/before/Test.java @@ -0,0 +1,4 @@ +class Test extends Super{ + public Test() { + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/InlineSuperClassTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/InlineSuperClassTest.java index 1865101eb30b..8c1b91b0fa00 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/InlineSuperClassTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/InlineSuperClassTest.java @@ -80,6 +80,7 @@ public class InlineSuperClassTest extends MultiFileTestCase { public void testOneAndKeepReferencesInAnotherInheritor() { doTest(false, true); } + public void testThisQualificationInsideAnonymous() { doTest(); } private void doTest() { doTest(false, false);