From 3e610fdfd1349c20f7d61e21d595cbe72a27b1fd Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 16 Sep 2009 18:05:42 +0400 Subject: [PATCH] suggest to override clone method from super class, not from Object --- .../generation/JavaImplementMethodsHandler.java | 15 +++++++++++---- .../codeInsight/generation/OverrideImplementUtil.java | 6 ++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/JavaImplementMethodsHandler.java b/java/java-impl/src/com/intellij/codeInsight/generation/JavaImplementMethodsHandler.java index ac131c7d5c..3aff4f56a0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/JavaImplementMethodsHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/JavaImplementMethodsHandler.java @@ -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; } diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java index 2772739f12..e7527be18c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java @@ -86,11 +86,13 @@ public class OverrideImplementUtil { Map concretes = new LinkedHashMap(); Map substitutors = new HashMap(); - PsiMethod[] allMethods = aClass.getAllMethods(); + Collection 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; -- 2.11.4.GIT