Skip to content

Commit af35bdd

Browse files
authored
Generate handlers localizing and refactoring. (#219)
1 parent 8ed9bd6 commit af35bdd

File tree

8 files changed

+737
-651
lines changed

8 files changed

+737
-651
lines changed

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/GenerateConstructorHandler.java

Lines changed: 256 additions & 245 deletions
Large diffs are not rendered by default.

plugin/src/main/java/com/intellij/java/impl/codeInsight/generation/GenerateEqualsHandler.java

Lines changed: 117 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -41,115 +41,127 @@
4141
* @author dsl
4242
*/
4343
public class GenerateEqualsHandler extends GenerateMembersHandlerBase {
44-
private static final Logger LOG = Logger.getInstance(GenerateEqualsHandler.class);
45-
private PsiField[] myEqualsFields = null;
46-
private PsiField[] myHashCodeFields = null;
47-
private PsiField[] myNonNullFields = null;
48-
private static final PsiElementClassMember[] DUMMY_RESULT = new PsiElementClassMember[1]; //cannot return empty array, but this result won't be used anyway
49-
50-
public GenerateEqualsHandler() {
51-
super("");
52-
}
53-
54-
@Override
55-
@RequiredUIAccess
56-
protected ClassMember[] chooseOriginalMembers(PsiClass aClass, Project project, Editor editor) {
57-
myEqualsFields = null;
58-
myHashCodeFields = null;
59-
myNonNullFields = PsiField.EMPTY_ARRAY;
60-
61-
GlobalSearchScope scope = aClass.getResolveScope();
62-
final PsiMethod equalsMethod = GenerateEqualsHelper.findMethod(aClass, GenerateEqualsHelper.getEqualsSignature(project, scope));
63-
final PsiMethod hashCodeMethod = GenerateEqualsHelper.findMethod(aClass, GenerateEqualsHelper.getHashCodeSignature());
64-
65-
boolean needEquals = equalsMethod == null;
66-
boolean needHashCode = hashCodeMethod == null;
67-
if (!needEquals && !needHashCode) {
68-
LocalizeValue text = aClass instanceof PsiAnonymousClass
69-
? CodeInsightLocalize.generateEqualsAndHashcodeAlreadyDefinedWarningAnonymous()
70-
: CodeInsightLocalize.generateEqualsAndHashcodeAlreadyDefinedWarning(aClass.getQualifiedName());
71-
72-
if (Messages.showYesNoDialog(
73-
project,
74-
text.get(),
75-
CodeInsightLocalize.generateEqualsAndHashcodeAlreadyDefinedTitle().get(),
76-
UIUtil.getQuestionIcon()
77-
) == Messages.YES) {
78-
if (!project.getApplication().runWriteAction((Computable<Boolean>)() -> {
79-
try {
80-
equalsMethod.delete();
81-
hashCodeMethod.delete();
82-
return Boolean.TRUE;
83-
}
84-
catch (IncorrectOperationException e) {
85-
LOG.error(e);
86-
return Boolean.FALSE;
87-
}
88-
})) {
89-
return null;
90-
} else {
91-
needEquals = needHashCode = true;
44+
private static final Logger LOG = Logger.getInstance(GenerateEqualsHandler.class);
45+
private PsiField[] myEqualsFields = null;
46+
private PsiField[] myHashCodeFields = null;
47+
private PsiField[] myNonNullFields = null;
48+
//cannot return empty array, but this result won't be used anyway
49+
private static final PsiElementClassMember[] DUMMY_RESULT = new PsiElementClassMember[1];
50+
51+
public GenerateEqualsHandler() {
52+
super(LocalizeValue.empty());
53+
}
54+
55+
@Override
56+
@RequiredUIAccess
57+
protected ClassMember[] chooseOriginalMembers(PsiClass aClass, Project project, Editor editor) {
58+
myEqualsFields = null;
59+
myHashCodeFields = null;
60+
myNonNullFields = PsiField.EMPTY_ARRAY;
61+
62+
GlobalSearchScope scope = aClass.getResolveScope();
63+
PsiMethod equalsMethod = GenerateEqualsHelper.findMethod(aClass, GenerateEqualsHelper.getEqualsSignature(project, scope));
64+
PsiMethod hashCodeMethod = GenerateEqualsHelper.findMethod(aClass, GenerateEqualsHelper.getHashCodeSignature());
65+
66+
boolean needEquals = equalsMethod == null;
67+
boolean needHashCode = hashCodeMethod == null;
68+
if (!needEquals && !needHashCode) {
69+
LocalizeValue text = aClass instanceof PsiAnonymousClass
70+
? CodeInsightLocalize.generateEqualsAndHashcodeAlreadyDefinedWarningAnonymous()
71+
: CodeInsightLocalize.generateEqualsAndHashcodeAlreadyDefinedWarning(aClass.getQualifiedName());
72+
73+
if (Messages.showYesNoDialog(
74+
project,
75+
text.get(),
76+
CodeInsightLocalize.generateEqualsAndHashcodeAlreadyDefinedTitle().get(),
77+
UIUtil.getQuestionIcon()
78+
) == Messages.YES) {
79+
if (!project.getApplication().runWriteAction((Computable<Boolean>) () -> {
80+
try {
81+
equalsMethod.delete();
82+
hashCodeMethod.delete();
83+
return Boolean.TRUE;
84+
}
85+
catch (IncorrectOperationException e) {
86+
LOG.error(e);
87+
return Boolean.FALSE;
88+
}
89+
})) {
90+
return null;
91+
}
92+
else {
93+
needEquals = needHashCode = true;
94+
}
95+
}
96+
else {
97+
return null;
98+
}
9299
}
93-
} else {
94-
return null;
95-
}
100+
boolean hasNonStaticFields = hasNonStaticFields(aClass);
101+
if (!hasNonStaticFields) {
102+
HintManager.getInstance().showErrorHint(editor, "No fields to include in equals/hashCode have been found");
103+
return null;
104+
}
105+
106+
GenerateEqualsWizard wizard = new GenerateEqualsWizard(project, aClass, needEquals, needHashCode);
107+
if (!wizard.showAndGet()) {
108+
return null;
109+
}
110+
myEqualsFields = wizard.getEqualsFields();
111+
myHashCodeFields = wizard.getHashCodeFields();
112+
myNonNullFields = wizard.getNonNullFields();
113+
return DUMMY_RESULT;
96114
}
97-
boolean hasNonStaticFields = hasNonStaticFields(aClass);
98-
if (!hasNonStaticFields) {
99-
HintManager.getInstance().showErrorHint(editor, "No fields to include in equals/hashCode have been found");
100-
return null;
115+
116+
private static boolean hasNonStaticFields(PsiClass aClass) {
117+
for (PsiField field : aClass.getFields()) {
118+
if (!field.isStatic()) {
119+
return true;
120+
}
121+
}
122+
return false;
101123
}
102124

103-
GenerateEqualsWizard wizard = new GenerateEqualsWizard(project, aClass, needEquals, needHashCode);
104-
if (!wizard.showAndGet()) {
105-
return null;
125+
@Override
126+
protected boolean hasMembers(@Nonnull PsiClass aClass) {
127+
return hasNonStaticFields(aClass);
106128
}
107-
myEqualsFields = wizard.getEqualsFields();
108-
myHashCodeFields = wizard.getHashCodeFields();
109-
myNonNullFields = wizard.getNonNullFields();
110-
return DUMMY_RESULT;
111-
}
112-
113-
private static boolean hasNonStaticFields(PsiClass aClass) {
114-
for (PsiField field : aClass.getFields()) {
115-
if (!field.hasModifierProperty(PsiModifier.STATIC)) {
116-
return true;
117-
}
129+
130+
@Nonnull
131+
@Override
132+
protected List<? extends GenerationInfo> generateMemberPrototypes(PsiClass aClass, ClassMember[] originalMembers)
133+
throws IncorrectOperationException {
134+
Project project = aClass.getProject();
135+
boolean useInstanceOfToCheckParameterType = JavaCodeInsightSettings.getInstance().USE_INSTANCEOF_ON_EQUALS_PARAMETER;
136+
boolean useAccessors = JavaCodeInsightSettings.getInstance().USE_ACCESSORS_IN_EQUALS_HASHCODE;
137+
138+
GenerateEqualsHelper helper = new GenerateEqualsHelper(
139+
project,
140+
aClass,
141+
myEqualsFields,
142+
myHashCodeFields,
143+
myNonNullFields,
144+
useInstanceOfToCheckParameterType,
145+
useAccessors
146+
);
147+
return OverrideImplementUtil.convert2GenerationInfos(helper.generateMembers());
148+
}
149+
150+
@Override
151+
protected ClassMember[] getAllOriginalMembers(PsiClass aClass) {
152+
return null;
153+
}
154+
155+
@Override
156+
protected GenerationInfo[] generateMemberPrototypes(PsiClass aClass, ClassMember originalMember) {
157+
return null;
158+
}
159+
160+
@Override
161+
protected void cleanup() {
162+
super.cleanup();
163+
myEqualsFields = null;
164+
myHashCodeFields = null;
165+
myNonNullFields = null;
118166
}
119-
return false;
120-
}
121-
122-
@Override
123-
protected boolean hasMembers(@Nonnull PsiClass aClass) {
124-
return hasNonStaticFields(aClass);
125-
}
126-
127-
@Override
128-
@Nonnull
129-
protected List<? extends GenerationInfo> generateMemberPrototypes(PsiClass aClass, ClassMember[] originalMembers) throws IncorrectOperationException {
130-
Project project = aClass.getProject();
131-
final boolean useInstanceofToCheckParameterType = JavaCodeInsightSettings.getInstance().USE_INSTANCEOF_ON_EQUALS_PARAMETER;
132-
final boolean useAccessors = JavaCodeInsightSettings.getInstance().USE_ACCESSORS_IN_EQUALS_HASHCODE;
133-
134-
GenerateEqualsHelper helper = new GenerateEqualsHelper(project, aClass, myEqualsFields, myHashCodeFields, myNonNullFields, useInstanceofToCheckParameterType, useAccessors);
135-
return OverrideImplementUtil.convert2GenerationInfos(helper.generateMembers());
136-
}
137-
138-
@Override
139-
protected ClassMember[] getAllOriginalMembers(PsiClass aClass) {
140-
return null;
141-
}
142-
143-
@Override
144-
protected GenerationInfo[] generateMemberPrototypes(PsiClass aClass, ClassMember originalMember) {
145-
return null;
146-
}
147-
148-
@Override
149-
protected void cleanup() {
150-
super.cleanup();
151-
myEqualsFields = null;
152-
myHashCodeFields = null;
153-
myNonNullFields = null;
154-
}
155167
}

0 commit comments

Comments
 (0)