From: Bas Leijdekkers Date: Tue, 2 Sep 2014 16:52:45 +0000 (+0200) Subject: IDEA-79962 (Inspection "equals() and hashCode() not paired " does not provide miss... X-Git-Tag: clion/138.2010~9^2 X-Git-Url: https://git.jetbrains.org/?p=idea%2Fcommunity.git;a=commitdiff_plain;h=ffff2ffd0ceaaade87ba6fa1a5d24277106b4e4d;hp=736f703bbf8231d519970c9f0e7ee348c8780d2b IDEA-79962 (Inspection "equals() and hashCode() not paired " does not provide miss method insertion) --- diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcode.java b/java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcodeBase.java similarity index 91% rename from java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcode.java rename to java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcodeBase.java index 4c41d90a9afa..6a5f0627d5e1 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcode.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcodeBase.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2014 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. @@ -15,10 +15,7 @@ */ package com.intellij.codeInspection.equalsAndHashcode; -import com.intellij.codeInspection.BaseJavaBatchLocalInspectionTool; -import com.intellij.codeInspection.InspectionsBundle; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemsHolder; +import com.intellij.codeInspection.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectRootManager; @@ -36,10 +33,10 @@ import org.jetbrains.annotations.Nullable; /** * @author max */ -public class EqualsAndHashcode extends BaseJavaBatchLocalInspectionTool { +public class EqualsAndHashcodeBase extends BaseJavaBatchLocalInspectionTool { @Override @NotNull - public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { + public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { final Project project = holder.getProject(); Pair pair = CachedValuesManager.getManager(project).getCachedValue(project, new CachedValueProvider>() { @Override @@ -92,7 +89,7 @@ public class EqualsAndHashcode extends BaseJavaBatchLocalInspectionTool { hasEquals[0] ? InspectionsBundle.message("inspection.equals.hashcode.only.one.defined.problem.descriptor", "equals()", "hashCode()") : InspectionsBundle.message("inspection.equals.hashcode.only.one.defined.problem.descriptor","hashCode()", "equals()"), - (LocalQuickFix[])null); + buildFixes(isOnTheFly, hasEquals[0])); } } }; @@ -130,4 +127,8 @@ public class EqualsAndHashcode extends BaseJavaBatchLocalInspectionTool { public String getShortName() { return "EqualsAndHashcode"; } + + protected LocalQuickFix[] buildFixes(boolean isOnTheFly, boolean hasEquals) { + return LocalQuickFix.EMPTY_ARRAY; + } } diff --git a/java/java-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcode.java b/java/java-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcode.java new file mode 100644 index 000000000000..3887640051c4 --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInspection/equalsAndHashcode/EqualsAndHashcode.java @@ -0,0 +1,72 @@ +/* + * Copyright 2000-2014 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.codeInspection.equalsAndHashcode; + +import com.intellij.codeInsight.generation.GenerateEqualsHandler; +import com.intellij.codeInspection.InspectionsBundle; +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.codeInspection.ProblemDescriptor; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; + +/** + * @author Bas Leijdekkers + */ +public class EqualsAndHashcode extends EqualsAndHashcodeBase { + + protected LocalQuickFix[] buildFixes(boolean isOnTheFly, boolean hasEquals) { + if (!isOnTheFly) { + return LocalQuickFix.EMPTY_ARRAY; + } + return new LocalQuickFix[]{new GenerateEqualsHashcodeFix(hasEquals)}; + } + + private static class GenerateEqualsHashcodeFix implements LocalQuickFix { + + private final boolean myHasEquals; + + public GenerateEqualsHashcodeFix(boolean hasEquals) { + myHasEquals = hasEquals; + } + + @NotNull + @Override + public String getName() { + return myHasEquals + ? InspectionsBundle.message("inspection.equals.hashcode.generate.hashcode.quickfix") + : InspectionsBundle.message("inspection.equals.hashcode.generate.equals.quickfix"); + } + + @NotNull + @Override + public String getFamilyName() { + return getName(); + } + + @Override + public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { + final Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor(); + if (editor == null) { + return; + } + final PsiElement element = descriptor.getPsiElement(); + new GenerateEqualsHandler().invoke(project, editor, element.getContainingFile()); + } + } +} diff --git a/platform/platform-resources-en/src/messages/InspectionsBundle.properties b/platform/platform-resources-en/src/messages/InspectionsBundle.properties index 98e0045a31f3..bccf8c48411f 100644 --- a/platform/platform-resources-en/src/messages/InspectionsBundle.properties +++ b/platform/platform-resources-en/src/messages/InspectionsBundle.properties @@ -116,6 +116,8 @@ inspection.redundant.throws.problem.descriptor2=The declared exception {0} is ne inspection.equals.hashcode.display.name=equals() and hashCode() not paired inspection.equals.hashcode.only.one.defined.problem.descriptor=Class has {0} defined but does not define {1} +inspection.equals.hashcode.generate.equals.quickfix=Generate 'equals()' +inspection.equals.hashcode.generate.hashcode.quickfix=Generate 'hashCode()' inspection.1.5.display.name=Usages of API documented as @since 1.5 (1.6|1.7) inspection.1.5.problem.descriptor=Usage of API documented as @since {0}+