do not replace anonymous inheritance with delegation

This commit is contained in:
anna
2009-10-05 21:45:28 +04:00
parent d962ca4694
commit a3815f908e
4 changed files with 18 additions and 3 deletions
@@ -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();
@@ -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 =
@@ -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() {
@@ -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);
}
}
}