diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateGetterSetterHandlerBase.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateGetterSetterHandlerBase.java index 8874a983e58a..0bda4000366b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateGetterSetterHandlerBase.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateGetterSetterHandlerBase.java @@ -35,7 +35,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -abstract class GenerateGetterSetterHandlerBase extends GenerateMembersHandlerBase { +public abstract class GenerateGetterSetterHandlerBase extends GenerateMembersHandlerBase { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.generation.GenerateGetterSetterHandlerBase"); static { @@ -44,7 +44,7 @@ abstract class GenerateGetterSetterHandlerBase extends GenerateMembersHandlerBas public Collection fun(PsiClass s) { if (s.getLanguage() != StdLanguages.JAVA) return Collections.emptyList(); final List result = new ArrayList(); - for(PsiField field: s.getFields()) { + for (PsiField field : s.getFields()) { if (!(field instanceof PsiEnumConstant)) { result.add(new PsiFieldMember(field)); } @@ -75,6 +75,11 @@ abstract class GenerateGetterSetterHandlerBase extends GenerateMembersHandlerBas protected abstract String getNothingFoundMessage(); protected abstract String getNothingAcceptedMessage(); + public boolean canBeAppliedTo(PsiClass targetClass) { + final ClassMember[] allMembers = getAllOriginalMembers(targetClass); + return allMembers != null && allMembers.length != 0; + } + @Nullable protected ClassMember[] getAllOriginalMembers(final PsiClass aClass) { final List list = GenerateAccessorProviderRegistrar.getEncapsulatableClassMembers(aClass); 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 3202c82f9648..554aa5151cf0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/JavaImplementMethodsHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/JavaImplementMethodsHandler.java @@ -34,7 +34,7 @@ public class JavaImplementMethodsHandler implements LanguageCodeInsightActionHan } PsiClass aClass = OverrideImplementUtil.getContextClass(file.getProject(), editor, file, false); - return aClass != null; + return aClass != null && !OverrideImplementUtil.getMethodSignaturesToImplement(aClass).isEmpty(); } public void invoke(@NotNull final Project project, @NotNull final Editor editor, @NotNull final PsiFile file) { diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/JavaOverrideMethodsHandler.java b/java/java-impl/src/com/intellij/codeInsight/generation/JavaOverrideMethodsHandler.java index 24ce4d40af4a..5e3745b78f7c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/JavaOverrideMethodsHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/JavaOverrideMethodsHandler.java @@ -15,6 +15,7 @@ */ 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; @@ -28,14 +29,23 @@ import org.jetbrains.annotations.NotNull; */ public class JavaOverrideMethodsHandler implements LanguageCodeInsightActionHandler { public boolean isValidFor(final Editor editor, final PsiFile file) { - return file instanceof PsiJavaFile && OverrideImplementUtil.getContextClass(file.getProject(), editor, file, true) != null; + if (!(file instanceof PsiJavaFile)) { + return false; + } + + PsiClass aClass = OverrideImplementUtil.getContextClass(file.getProject(), editor, file, true); + return aClass != null && !OverrideImplementUtil.getMethodSignaturesToOverride(aClass).isEmpty(); } public void invoke(@NotNull final Project project, @NotNull final Editor editor, @NotNull final PsiFile file) { PsiClass aClass = OverrideImplementUtil.getContextClass(project, editor, file, true); - if (aClass != null) { - OverrideImplementUtil.chooseAndOverrideMethods(project, editor, aClass); + if (aClass == null) return; + + if (OverrideImplementUtil.getMethodSignaturesToOverride(aClass).isEmpty()) { + HintManager.getInstance().showErrorHint(editor, "No methods to override have been found"); + return; } + OverrideImplementUtil.chooseAndOverrideMethods(project, editor, aClass); } public boolean startInWriteAction() { diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterAction.java b/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterAction.java index 672633a528f3..08063cdff16c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterAction.java @@ -21,10 +21,9 @@ import com.intellij.codeInsight.generation.GenerateGetterHandler; * Action group which contains Generate... actions * Available in the Java code editor context only * @author Alexey Kudravtsev - */ -public class GenerateGetterAction extends BaseGenerateAction { + */ +public class GenerateGetterAction extends GenerateGetterSetterBaseAction { public GenerateGetterAction() { super(new GenerateGetterHandler()); } - } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterAndSetterAction.java b/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterAndSetterAction.java index 7bdc0ccf979a..5b565cc249a4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterAndSetterAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterAndSetterAction.java @@ -22,9 +22,8 @@ import com.intellij.codeInsight.generation.GenerateGetterAndSetterHandler; * Available in the Java code editor context only * @author Alexey Kudravtsev */ -public class GenerateGetterAndSetterAction extends BaseGenerateAction { +public class GenerateGetterAndSetterAction extends GenerateGetterSetterBaseAction { public GenerateGetterAndSetterAction() { super(new GenerateGetterAndSetterHandler()); } - } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterSetterBaseAction.java b/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterSetterBaseAction.java new file mode 100644 index 000000000000..e6056d84fad4 --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateGetterSetterBaseAction.java @@ -0,0 +1,36 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.generation.actions; + +import com.intellij.codeInsight.generation.GenerateGetterSetterHandlerBase; +import com.intellij.psi.PsiClass; + +/** + * Action group which contains Generate... actions + * Available in the Java code editor context only + * @author Danila Ponomarenko + */ +public abstract class GenerateGetterSetterBaseAction extends BaseGenerateAction { + public GenerateGetterSetterBaseAction(GenerateGetterSetterHandlerBase handler) { + super(handler); + } + + @Override + protected boolean isValidForClass(PsiClass targetClass) { + final GenerateGetterSetterHandlerBase handler = (GenerateGetterSetterHandlerBase)getHandler(); + return handler.canBeAppliedTo(targetClass); + } +} diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateSetterAction.java b/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateSetterAction.java index eebbc72b24f8..240befe1637e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateSetterAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/actions/GenerateSetterAction.java @@ -22,7 +22,7 @@ import com.intellij.codeInsight.generation.GenerateSetterHandler; * Available in the Java code editor context only * @author Alexey Kudravtsev */ -public class GenerateSetterAction extends BaseGenerateAction { +public class GenerateSetterAction extends GenerateGetterSetterBaseAction { public GenerateSetterAction() { super(new GenerateSetterHandler()); } diff --git a/java/openapi/src/com/intellij/codeInsight/generation/actions/BaseGenerateAction.java b/java/openapi/src/com/intellij/codeInsight/generation/actions/BaseGenerateAction.java index 30d24589cd8d..cd3fed795f8a 100644 --- a/java/openapi/src/com/intellij/codeInsight/generation/actions/BaseGenerateAction.java +++ b/java/openapi/src/com/intellij/codeInsight/generation/actions/BaseGenerateAction.java @@ -53,10 +53,7 @@ public class BaseGenerateAction extends CodeInsightAction { PsiDocumentManager.getInstance(project).commitAllDocuments(); PsiClass targetClass = getTargetClass(editor, file); - if (targetClass == null) return false; - if (!isValidForClass(targetClass)) return false; //? - - return true; + return targetClass != null && isValidForClass(targetClass); } protected boolean isValidForClass(final PsiClass targetClass) {