diff --git a/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java b/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java index 0517518938cf..1a82f3a0688e 100644 --- a/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/inheritanceToDelegation/InheritanceToDelegationProcessor.java @@ -552,6 +552,7 @@ public class InheritanceToDelegationProcessor extends BaseRefactoringProcessor { private void addImplementingInterfaces() throws IncorrectOperationException { final PsiReferenceList implementsList = myClass.getImplementsList(); + LOG.assertTrue(implementsList != null); for (PsiClass delegatedInterface : myDelegatedInterfaces) { if (!myClassImplementedInterfaces.contains(delegatedInterface)) { implementsList.add(myFactory.createClassReferenceElement(delegatedInterface)); @@ -560,6 +561,7 @@ public class InheritanceToDelegationProcessor extends BaseRefactoringProcessor { if (!myBaseClass.isInterface()) { final PsiReferenceList extendsList = myClass.getExtendsList(); + LOG.assertTrue(extendsList != null); extendsList.getReferenceElements()[0].delete(); } else { final PsiJavaCodeReferenceElement[] interfaceRefs = implementsList.getReferenceElements(); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/ReplaceInheritanceWithDelegationFix.java b/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/ReplaceInheritanceWithDelegationFix.java index c9195e5dad39..59d04e95273a 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/ReplaceInheritanceWithDelegationFix.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/fixes/ReplaceInheritanceWithDelegationFix.java @@ -19,6 +19,7 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiAnonymousClass; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.refactoring.JavaRefactoringActionHandlerFactory; @@ -38,6 +39,7 @@ public class ReplaceInheritanceWithDelegationFix extends InspectionGadgetsFix { public void doFix(@NotNull Project project, ProblemDescriptor descriptor) { final PsiElement nameElement = descriptor.getPsiElement(); final PsiClass aClass = (PsiClass) nameElement.getParent(); + assert !(aClass instanceof PsiAnonymousClass); final JavaRefactoringActionHandlerFactory factory = JavaRefactoringActionHandlerFactory.getInstance(); final RefactoringActionHandler anonymousToInner = diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/inheritance/ExtendsConcreteCollectionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/inheritance/ExtendsConcreteCollectionInspection.java index cbacd8fb0511..19d45d55603b 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/inheritance/ExtendsConcreteCollectionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/inheritance/ExtendsConcreteCollectionInspection.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.inheritance; +import com.intellij.psi.PsiAnonymousClass; import com.intellij.psi.PsiClass; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; @@ -46,7 +47,11 @@ public class ExtendsConcreteCollectionInspection extends BaseInspection { } protected InspectionGadgetsFix buildFix(Object... infos) { - return new ReplaceInheritanceWithDelegationFix(); + final PsiClass superClass = (PsiClass)infos[0]; + //skip inheritance with delegation for anonymous classes + // or better suggest to replace anonymous with inner and then replace with delegation + if (superClass instanceof PsiAnonymousClass) return null; + return new ReplaceInheritanceWithDelegationFix(); } public BaseInspectionVisitor buildVisitor() { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/threading/ExtendsThreadInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/threading/ExtendsThreadInspection.java index 454e42710da7..b21826bfedef 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/threading/ExtendsThreadInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/threading/ExtendsThreadInspection.java @@ -15,6 +15,7 @@ */ package com.siyeh.ig.threading; +import com.intellij.psi.PsiAnonymousClass; import com.intellij.psi.PsiClass; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; @@ -41,8 +42,13 @@ public class ExtendsThreadInspection extends BaseInspection { "extends.thread.problem.descriptor"); } + /** + * @see com.siyeh.ig.inheritance.ExtendsConcreteCollectionInspection#buildFix(java.lang.Object...) + */ protected InspectionGadgetsFix buildFix(Object... infos) { - return new ReplaceInheritanceWithDelegationFix(); + final PsiClass superClass = (PsiClass)infos[0]; + if (superClass instanceof PsiAnonymousClass) return null; + return new ReplaceInheritanceWithDelegationFix(); } public BaseInspectionVisitor buildVisitor() { @@ -64,7 +70,7 @@ public class ExtendsThreadInspection extends BaseInspection { if (!"java.lang.Thread".equals(superclassName)) { return; } - registerClassError(aClass); + registerClassError(aClass, aClass); } } } \ No newline at end of file