suggest to override clone method from super class, not from Object

This commit is contained in:
Alexey Kudravtsev
2009-09-16 18:05:42 +04:00
parent 0470a1b2de
commit 3e610fdfd1
2 changed files with 15 additions and 6 deletions
@@ -1,10 +1,11 @@
package com.intellij.codeInsight.generation;
import com.intellij.codeInsight.hint.HintManager;
import com.intellij.lang.LanguageCodeInsightActionHandler;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaFile;
/**
@@ -17,15 +18,21 @@ public class JavaImplementMethodsHandler implements LanguageCodeInsightActionHan
}
PsiClass aClass = OverrideImplementUtil.getContextClass(file.getProject(), editor, file, false);
return aClass != null && !OverrideImplementUtil.getMethodSignaturesToImplement(aClass).isEmpty();
return aClass != null;
}
public void invoke(final Project project, final Editor editor, final PsiFile file) {
PsiClass aClass = OverrideImplementUtil.getContextClass(project, editor, file, false);
if (aClass != null) {
OverrideImplementUtil.chooseAndImplementMethods(project, editor, aClass);
if (aClass == null) {
return;
}
if (OverrideImplementUtil.getMethodSignaturesToImplement(aClass).isEmpty()) {
HintManager.getInstance().showErrorHint(editor, "No methods to implement have been found");
return;
}
OverrideImplementUtil.chooseAndImplementMethods(project, editor, aClass);
}
public boolean startInWriteAction() {
return false;
}
@@ -86,11 +86,13 @@ public class OverrideImplementUtil {
Map<MethodSignature, PsiMethod> concretes = new LinkedHashMap<MethodSignature,PsiMethod>();
Map<PsiClass, PsiSubstitutor> substitutors = new HashMap<PsiClass,PsiSubstitutor>();
PsiMethod[] allMethods = aClass.getAllMethods();
Collection<HierarchicalMethodSignature> allMethodSigs = aClass.getVisibleSignatures();
PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(aClass.getProject()).getResolveHelper();
for (PsiMethod method : allMethods) {
for (HierarchicalMethodSignature methodSig : allMethodSigs) {
PsiMethod method = methodSig.getMethod();
if (method.hasModifierProperty(PsiModifier.STATIC) || !resolveHelper.isAccessible(method, aClass, aClass)) continue;
PsiClass hisClass = method.getContainingClass();
if (hisClass == null) continue;
//Filter non-immediate super constructors
if (method.isConstructor() && (!aClass.isInheritor(hisClass, false) || aClass instanceof PsiAnonymousClass || aClass.isEnum())) {
continue;