mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
IDEA-111144 'Generate Getter' should add @Override if needed
This commit is contained in:
@@ -26,7 +26,6 @@ import com.intellij.openapi.util.Iconable;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.infos.CandidateInfo;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiFormatUtil;
|
||||
import com.intellij.psi.util.PsiFormatUtilBase;
|
||||
import com.intellij.ui.RowIcon;
|
||||
@@ -68,8 +67,8 @@ public class JavaGenerateMemberCompletionContributor {
|
||||
List<PsiMethod> prototypes = ContainerUtil.newArrayList();
|
||||
for (PsiField field : parent.getFields()) {
|
||||
if (!(field instanceof PsiEnumConstant)) {
|
||||
prototypes.add(PropertyUtil.generateGetterPrototype(field));
|
||||
prototypes.add(PropertyUtil.generateSetterPrototype(field));
|
||||
prototypes.add(GenerateMembersUtil.generateGetterPrototype(field));
|
||||
prototypes.add(GenerateMembersUtil.generateSetterPrototype(field));
|
||||
}
|
||||
}
|
||||
for (final PsiMethod prototype : prototypes) {
|
||||
|
||||
@@ -17,13 +17,13 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.codeInsight.intention.LowPriorityAction;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -116,10 +116,10 @@ public class CreateGetterOrSetterFix implements IntentionAction, LowPriorityActi
|
||||
PsiClass aClass = myField.getContainingClass();
|
||||
final List<PsiMethod> methods = new ArrayList<PsiMethod>();
|
||||
if (myCreateGetter) {
|
||||
methods.add(PropertyUtil.generateGetterPrototype(myField));
|
||||
methods.add(GenerateMembersUtil.generateGetterPrototype(myField));
|
||||
}
|
||||
if (myCreateSetter) {
|
||||
methods.add(PropertyUtil.generateSetterPrototype(myField));
|
||||
methods.add(GenerateMembersUtil.generateSetterPrototype(myField));
|
||||
}
|
||||
for (PsiMethod method : methods) {
|
||||
aClass.add(method);
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
@@ -55,13 +56,13 @@ public class CreateGetterSetterPropertyFromUsageFix extends CreatePropertyFromUs
|
||||
|
||||
@Override
|
||||
protected void beforeTemplateFinished(PsiClass aClass, PsiField field) {
|
||||
PsiMethod getterPrototype = PropertyUtil.generateGetterPrototype(field);
|
||||
PsiMethod getterPrototype = GenerateMembersUtil.generateGetterPrototype(field);
|
||||
if (aClass.findMethodsBySignature(getterPrototype, false).length == 0) {
|
||||
aClass.add(getterPrototype);
|
||||
}
|
||||
|
||||
|
||||
PsiMethod setterPrototype = PropertyUtil.generateSetterPrototype(field);
|
||||
PsiMethod setterPrototype = GenerateMembersUtil.generateSetterPrototype(field);
|
||||
if (aClass.findMethodsBySignature(setterPrototype, false).length == 0) {
|
||||
aClass.add(setterPrototype);
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
import com.intellij.codeInsight.CodeInsightUtilCore;
|
||||
import com.intellij.codeInsight.completion.JavaLookupElementBuilder;
|
||||
import com.intellij.codeInsight.daemon.QuickFixBundle;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.codeInsight.intention.HighPriorityAction;
|
||||
import com.intellij.codeInsight.intention.impl.TypeExpression;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
@@ -226,7 +227,7 @@ public class CreatePropertyFromUsageFix extends CreateFromUsageBaseFix implement
|
||||
PsiElement typeReference;
|
||||
PsiCodeBlock body;
|
||||
if (callText.startsWith(GET_PREFIX) || callText.startsWith(IS_PREFIX)) {
|
||||
accessor = (PsiMethod)targetClass.add(PropertyUtil.generateGetterPrototype(field));
|
||||
accessor = (PsiMethod)targetClass.add(GenerateMembersUtil.generateGetterPrototype(field));
|
||||
body = accessor.getBody();
|
||||
LOG.assertTrue(body != null, accessor.getText());
|
||||
fieldReference = ((PsiReturnStatement)body.getStatements()[0]).getReturnValue();
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.intellij.codeInsight.daemon.impl.quickfix;
|
||||
|
||||
import com.intellij.codeInsight.FileModificationService;
|
||||
import com.intellij.codeInsight.daemon.impl.HighlightInfo;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -98,7 +99,7 @@ public class ReplaceInaccessibleFieldWithGetterSetterFix extends LocalQuickFixAn
|
||||
}
|
||||
}
|
||||
else if (PsiUtil.isAccessedForReading((PsiExpression)place)) {
|
||||
final PsiMethod getterPrototype = PropertyUtil.generateGetterPrototype(psiField);
|
||||
final PsiMethod getterPrototype = GenerateMembersUtil.generateGetterPrototype(psiField);
|
||||
final PsiMethod getter = containingClass.findMethodBySignature(getterPrototype, true);
|
||||
if (getter != null && PsiUtil.isAccessible(getter, place, accessObjectClass)) {
|
||||
QuickFixAction.registerQuickFixAction(error, new ReplaceInaccessibleFieldWithGetterSetterFix(place, getter, false));
|
||||
|
||||
@@ -33,6 +33,7 @@ import com.intellij.psi.impl.light.LightTypeElement;
|
||||
import com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
@@ -550,4 +551,27 @@ public class GenerateMembersUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateGetterPrototype(@NotNull PsiField field) {
|
||||
return annotateOnOverrideImplement(field.getContainingClass(), PropertyUtil.generateGetterPrototype(field));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateSetterPrototype(@NotNull PsiField field) {
|
||||
return annotateOnOverrideImplement(field.getContainingClass(), PropertyUtil.generateSetterPrototype(field));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiMethod annotateOnOverrideImplement(@Nullable PsiClass targetClass, @Nullable PsiMethod generated) {
|
||||
if (generated == null || targetClass == null) return generated;
|
||||
|
||||
if (CodeStyleSettingsManager.getSettings(targetClass.getProject()).INSERT_OVERRIDE_ANNOTATION) {
|
||||
PsiMethod superMethod = targetClass.findMethodBySignature(generated, true);
|
||||
if (superMethod != null && superMethod.getContainingClass() != targetClass) {
|
||||
OverrideImplementUtil.annotateOnOverrideImplement(generated, targetClass, superMethod, true);
|
||||
}
|
||||
}
|
||||
return generated;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.refactoring.encapsulateFields;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.help.HelpManager;
|
||||
@@ -509,8 +510,8 @@ public String getAccessorsVisibility() {
|
||||
|
||||
private PsiMethod generateMethodPrototype(PsiField field, String methodName, boolean isGetter) {
|
||||
PsiMethod prototype = isGetter
|
||||
? PropertyUtil.generateGetterPrototype(field)
|
||||
: PropertyUtil.generateSetterPrototype(field);
|
||||
? GenerateMembersUtil.generateGetterPrototype(field)
|
||||
: GenerateMembersUtil.generateSetterPrototype(field);
|
||||
try {
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(field.getProject()).getElementFactory();
|
||||
PsiIdentifier identifier = factory.createIdentifier(methodName);
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
package com.intellij.refactoring.extractMethodObject;
|
||||
|
||||
import com.intellij.codeInsight.NullableNotNullManager;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -255,7 +256,7 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
|
||||
field = PropertyUtil.findPropertyField(myProject, myInnerClass, name, false);
|
||||
}
|
||||
LOG.assertTrue(field != null, "i:" + i + "; output variables: " + Arrays.toString(outputVariables) + "; parameters: " + Arrays.toString(getMethod().getParameterList().getParameters()) + "; output field: " + outputField );
|
||||
myInnerClass.add(PropertyUtil.generateGetterPrototype(field));
|
||||
myInnerClass.add(GenerateMembersUtil.generateGetterPrototype(field));
|
||||
}
|
||||
|
||||
PsiParameter[] params = getMethod().getParameterList().getParameters();
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.refactoring.extractclass;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.ide.util.PackageUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -311,11 +312,11 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
if (myGenerateAccessors) {
|
||||
final NecessaryAccessorsVisitor visitor = checkNecessaryGettersSetters4SourceClass();
|
||||
for (PsiField field : visitor.getFieldsNeedingGetter()) {
|
||||
sourceClass.add(PropertyUtil.generateGetterPrototype(field));
|
||||
sourceClass.add(GenerateMembersUtil.generateGetterPrototype(field));
|
||||
}
|
||||
|
||||
for (PsiField field : visitor.getFieldsNeedingSetter()) {
|
||||
sourceClass.add(PropertyUtil.generateSetterPrototype(field));
|
||||
sourceClass.add(GenerateMembersUtil.generateSetterPrototype(field));
|
||||
}
|
||||
}
|
||||
super.performRefactoring(usageInfos);
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
*/
|
||||
package com.intellij.refactoring.introduceParameter;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.IntroduceParameterRefactoring;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
@@ -217,7 +217,7 @@ public class OldReferenceResolver {
|
||||
}
|
||||
PsiElement newExpr = expr;
|
||||
|
||||
PsiMethod getterPrototype = PropertyUtil.generateGetterPrototype(psiField);
|
||||
PsiMethod getterPrototype = GenerateMembersUtil.generateGetterPrototype(psiField);
|
||||
|
||||
PsiMethod getter = psiField.getContainingClass().findMethodBySignature(getterPrototype, true);
|
||||
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
*/
|
||||
package com.intellij.refactoring.introduceparameterobject.usageInfo;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.psi.PsiParameter;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.refactoring.RefactorJBundle;
|
||||
import com.intellij.refactoring.introduceparameterobject.IntroduceParameterObjectProcessor;
|
||||
import com.intellij.refactoring.util.FixableUsageInfo;
|
||||
@@ -70,8 +70,8 @@ public class AppendAccessorsUsageInfo extends FixableUsageInfo{
|
||||
final PsiField field = parameterChunk.getField();
|
||||
if (field != null) {
|
||||
element.add(isGetter
|
||||
? PropertyUtil.generateGetterPrototype(field)
|
||||
: PropertyUtil.generateSetterPrototype(field));
|
||||
? GenerateMembersUtil.generateGetterPrototype(field)
|
||||
: GenerateMembersUtil.generateSetterPrototype(field));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.refactoring.removemiddleman;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
@@ -99,7 +100,7 @@ public class RemoveMiddlemanProcessor extends FixableUsagesRefactoringProcessor
|
||||
} else {
|
||||
access = getterName + "()";
|
||||
if (getter == null) {
|
||||
getter = PropertyUtil.generateGetterPrototype(field);
|
||||
getter = GenerateMembersUtil.generateGetterPrototype(field);
|
||||
}
|
||||
}
|
||||
usages.add(new InlineDelegatingCall(call, paramPermutation, access, delegatedMethod.getName()));
|
||||
|
||||
@@ -397,6 +397,7 @@ public class PropertyUtil {
|
||||
return ArrayUtil.toStringArray(result);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateGetterPrototype(@NotNull PsiField field) {
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(field.getProject()).getElementFactory();
|
||||
Project project = field.getProject();
|
||||
@@ -422,14 +423,17 @@ public class PropertyUtil {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateSetterPrototype(PsiField field) {
|
||||
return generateSetterPrototype(field, field.getContainingClass());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateSetterPrototype(PsiField field, final PsiClass containingClass) {
|
||||
return generateSetterPrototype(field, containingClass, false);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateSetterPrototype(PsiField field, final PsiClass containingClass, boolean returnSelf) {
|
||||
Project project = field.getProject();
|
||||
JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(project);
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// "Create getter for 's'" "true"
|
||||
public class A extends Parent{
|
||||
private String s;
|
||||
|
||||
@Override
|
||||
public String getS() {
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
||||
class Parent {
|
||||
public String getS() {}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// "Create getter for 's'" "true"
|
||||
public class A extends Parent{
|
||||
private String <caret>s;
|
||||
}
|
||||
|
||||
class Parent {
|
||||
public String getS() {}
|
||||
}
|
||||
Reference in New Issue
Block a user