From e6fb83143a2aa2af8be1cd86efe8c5246be9dcd5 Mon Sep 17 00:00:00 2001 From: anna Date: Fri, 1 Mar 2013 16:49:32 +0100 Subject: [PATCH] change new operator type: anonymous classes processed (IDEA-102236) --- .../impl/quickfix/ChangeNewOperatorTypeFix.java | 14 +++++++++----- .../afterAnonymousClass.java | 10 +++++----- .../afterAnonymousClassTypeArgs.java | 16 ++++++++++++++++ .../afterAnonymousClassTypeArgsEmptyBody.java | 12 ++++++++++++ .../afterAnonymousClassTypeInheritor.java | 13 +++++++++++++ .../beforeAnonymousClassTypeArgs.java | 16 ++++++++++++++++ .../beforeAnonymousClassTypeArgsEmptyBody.java | 11 +++++++++++ .../beforeAnonymousClassTypeInheritor.java | 12 ++++++++++++ 8 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeArgs.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeArgsEmptyBody.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeInheritor.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeArgs.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeArgsEmptyBody.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeInheritor.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeNewOperatorTypeFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeNewOperatorTypeFix.java index 3d75b961b500..f168b6355ffd 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeNewOperatorTypeFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeNewOperatorTypeFix.java @@ -122,10 +122,11 @@ public class ChangeNewOperatorTypeFix implements IntentionAction { } if (anonymousClass != null) { - final PsiAnonymousClass newAnonymousClass = (PsiAnonymousClass)newExpression.getAnonymousClass().replace(anonymousClass); - final PsiClass aClass = PsiUtil.resolveClassInType(toType); - assert aClass != null; - newAnonymousClass.getBaseClassReference().replace(factory.createClassReferenceElement(aClass)); + PsiAnonymousClass newAnonymousClass = newExpression.getAnonymousClass(); + final PsiElement childInside = anonymousClass.getLBrace().getNextSibling(); + if (childInside != null) { + newAnonymousClass.addRange(childInside, anonymousClass.getRBrace().getPrevSibling()); + } } selection = null; caretOffset = -1; @@ -151,7 +152,10 @@ public class ChangeNewOperatorTypeFix implements IntentionAction { PsiType newType = lType; if (rType instanceof PsiClassType && newType instanceof PsiClassType) { final PsiClassType.ClassResolveResult rResolveResult = ((PsiClassType)rType).resolveGenerics(); - final PsiClass rClass = rResolveResult.getElement(); + PsiClass rClass = rResolveResult.getElement(); + if (rClass instanceof PsiAnonymousClass) { + rClass = ((PsiAnonymousClass)rClass).getBaseClassType().resolve(); + } if (rClass != null) { final PsiClassType.ClassResolveResult lResolveResult = ((PsiClassType)newType).resolveGenerics(); final PsiClass lClass = lResolveResult.getElement(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClass.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClass.java index 7a7121d4491b..7cdb1612d0e8 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClass.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClass.java @@ -1,9 +1,9 @@ // "Change 'new Runnable() {...}' to 'new StringBuffer()'" "true" class X { - public StringBuffer buf = new StringBuffer(){ - public void run(){ - System.out.println("smth"); - } - }; + public StringBuffer buf = new StringBuffer() { + public void run(){ + System.out.println("smth"); + } + }; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeArgs.java new file mode 100644 index 000000000000..a7adb5113ef1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeArgs.java @@ -0,0 +1,16 @@ +// "Change 'new Foo() {...}' to 'new Boo.Foo()'" "true" + +class Boo { + abstract class Foo{} + + private Foo foo() + { + return new Foo() { + @Override + public int hashCode() { + return super.hashCode(); + } + }; + } +} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeArgsEmptyBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeArgsEmptyBody.java new file mode 100644 index 000000000000..049073835c3a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeArgsEmptyBody.java @@ -0,0 +1,12 @@ +// "Change 'new Foo() {...}' to 'new Boo.Foo()'" "true" + +class Boo { + abstract class Foo{} + + private Foo foo() + { + return new Foo() { + }; + } +} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeInheritor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeInheritor.java new file mode 100644 index 000000000000..c2ff812b3073 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/afterAnonymousClassTypeInheritor.java @@ -0,0 +1,13 @@ +// "Change 'new FooImpl() {...}' to 'new Boo.FooImpl()'" "true" + +class Boo { + abstract class Foo{} + abstract class FooImpl extends Foo{} + + private Foo foo() + { + return new FooImpl() { + }; + } +} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeArgs.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeArgs.java new file mode 100644 index 000000000000..3f28ff141663 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeArgs.java @@ -0,0 +1,16 @@ +// "Change 'new Foo() {...}' to 'new Boo.Foo()'" "true" + +class Boo { + abstract class Foo{} + + private Foo foo() + { + return new Foo() { + @Override + public int hashCode() { + return super.hashCode(); + } + }; + } +} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeArgsEmptyBody.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeArgsEmptyBody.java new file mode 100644 index 000000000000..294e2d73ded9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeArgsEmptyBody.java @@ -0,0 +1,11 @@ +// "Change 'new Foo() {...}' to 'new Boo.Foo()'" "true" + +class Boo { + abstract class Foo{} + + private Foo foo() + { + return new Foo() {}; + } +} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeInheritor.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeInheritor.java new file mode 100644 index 000000000000..bfdc5344a5d7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeNewOperatorType/beforeAnonymousClassTypeInheritor.java @@ -0,0 +1,12 @@ +// "Change 'new FooImpl() {...}' to 'new Boo.FooImpl()'" "true" + +class Boo { + abstract class Foo{} + abstract class FooImpl extends Foo{} + + private Foo foo() + { + return new FooImpl() {}; + } +} +