diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java index ae1622b414e1..f0b6b8da1e26 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineMethodProcessor.java @@ -843,7 +843,12 @@ public class InlineMethodProcessor extends BaseRefactoringProcessor { PsiClass parentClass = (PsiClass)parent; final PsiClass containingClass = myMethod.getContainingClass(); if (containingClass != null && parentClass.isInheritor(containingClass, true)) { - qualifier = myFactory.createExpressionFromText(parentClass.getName() + ".this", null); + String name = parentClass.getName(); + // We cannot have qualified this reference to an anonymous class, so we leave it unqualified + // this might produce incorrect code in extremely rare cases + // when we inline a superclass method in an anonymous class, + // and the method body contains a nested class that refers to the outer one + qualifier = myFactory.createExpressionFromText(name == null ? "this" : name + ".this", null); } else if (containingClass != null && parentClass.equals(containingClass)) { qualifier = myFactory.createExpressionFromText("this", null); diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousCall.java b/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousCall.java new file mode 100644 index 000000000000..caec3b18c2fc --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousCall.java @@ -0,0 +1,15 @@ +public class Test { + static class X { + void foo() { + System.out.println(this); + } + } + + void test() { + new X () { + void bar() { + foo(); + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousCall.java.after b/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousCall.java.after new file mode 100644 index 000000000000..9f5d79d53bf5 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineMethod/InlineAnonymousCall.java.after @@ -0,0 +1,12 @@ +public class Test { + static class X { + } + + void test() { + new X () { + void bar() { + System.out.println(this); + } + }; + } +} \ No newline at end of file