generate equals/hashcode: preselct Objects.equals (IDEA-177603)

change default selection if chosen default is not applicable
This commit is contained in:
Anna.Kozlova
2017-08-16 14:53:03 +02:00
parent 0524ae95df
commit 2a62984a5e
4 changed files with 45 additions and 19 deletions
@@ -143,6 +143,11 @@ public class EqualsHashCodeTemplatesManager extends TemplatesManager {
}
}
@Override
protected String getInitialTemplateName() {
return toEqualsName(JAVA_UTIL_OBJECTS_EQUALS_AND_HASH_CODE);
}
public String getDefaultTemplateBaseName() {
return getTemplateBaseName(getDefaultTemplate());
}
@@ -364,7 +364,7 @@ public class GenerateEqualsWizard extends AbstractGenerateEqualsWizard<PsiClass,
templateChooserPanel.add(templateChooserLabel, BorderLayout.WEST);
final ComboBox comboBox = new ComboBox();
final ComboBox<String> comboBox = new ComboBox<>();
final ComponentWithBrowseButton<ComboBox> comboBoxWithBrowseButton =
new ComponentWithBrowseButton<>(comboBox, new MyEditTemplatesListener(psiClass, myPanel, comboBox));
templateChooserLabel.setLabelFor(comboBox);
@@ -406,7 +406,7 @@ public class GenerateEqualsWizard extends AbstractGenerateEqualsWizard<PsiClass,
}
private static void setupCombobox(EqualsHashCodeTemplatesManager templatesManager,
ComboBox comboBox,
ComboBox<String> comboBox,
PsiClass psiClass) {
final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(psiClass.getProject());
final GlobalSearchScope resolveScope = psiClass.getResolveScope();
@@ -431,16 +431,20 @@ public class GenerateEqualsWizard extends AbstractGenerateEqualsWizard<PsiClass,
}
}
});
comboBox.setModel(new DefaultComboBoxModel(ArrayUtil.toStringArray(names)));
comboBox.setSelectedItem(templatesManager.getDefaultTemplateBaseName());
comboBox.setModel(new DefaultComboBoxModel<>(ArrayUtil.toStringArray(names)));
String baseName = templatesManager.getDefaultTemplateBaseName();
if (invalid.contains(baseName)) { //preselect default template but do not remember as default
baseName = EqualsHashCodeTemplatesManager.getTemplateBaseName(templatesManager.getAllTemplates().iterator().next());
}
comboBox.setSelectedItem(baseName);
}
private static class MyEditTemplatesListener implements ActionListener {
private final PsiClass myPsiClass;
private final JComponent myParent;
private final ComboBox myComboBox;
private final ComboBox<String> myComboBox;
public MyEditTemplatesListener(PsiClass psiClass, JComponent panel, ComboBox comboBox) {
public MyEditTemplatesListener(PsiClass psiClass, JComponent panel, ComboBox<String> comboBox) {
myPsiClass = psiClass;
myParent = panel;
myComboBox = comboBox;
@@ -37,11 +37,11 @@ public class GenerateEquals15Test extends GenerateEqualsTestCase {
}
public void testDifferentTypesAllNotNull() {
doTest(Functions.id(), Functions.id(), Functions.id(), true);
doTestWithTemplate(EqualsHashCodeTemplatesManager.INTELLI_J_DEFAULT);
}
public void testDifferentTypesSuperEqualsAndHashCode() {
doTest(Functions.id(), Functions.id(), Functions.id(), true);
doTestWithTemplate(EqualsHashCodeTemplatesManager.INTELLI_J_DEFAULT);
}
public void testDifferentTypesNoDouble() {
@@ -49,7 +49,7 @@ public class GenerateEquals15Test extends GenerateEqualsTestCase {
}
public void testNameConflicts() {
doTest(Functions.id(), Functions.id(), Functions.id(), true);
doTestWithTemplate(EqualsHashCodeTemplatesManager.INTELLI_J_DEFAULT);
}
public void testClassWithTypeParams() {
@@ -19,24 +19,27 @@
*/
package org.jetbrains.java.generate.template;
import com.intellij.openapi.components.*;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.CharsetToolkit;
import com.intellij.psi.*;
import com.intellij.psi.CommonClassNames;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiType;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.Function;
import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.java.generate.element.FieldElement;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.util.*;
public abstract class TemplatesManager implements PersistentStateComponent<TemplatesState> {
@@ -93,15 +96,29 @@ public abstract class TemplatesManager implements PersistentStateComponent<Templ
}
public TemplateResource getDefaultTemplate() {
for (TemplateResource template : getAllTemplates()) {
if (Comparing.equal(template.getFileName(), myState.defaultTempalteName)) {
return template;
}
}
TemplateResource resource = findTemplateByName(myState.defaultTempalteName);
if (resource != null) return resource;
return getAllTemplates().iterator().next();
String initialTemplateName = getInitialTemplateName();
resource = initialTemplateName != null ? findTemplateByName(initialTemplateName) : null;
return ObjectUtils.notNull(resource, getAllTemplates().iterator().next());
}
protected String getInitialTemplateName () {
return null;
}
@Nullable
public TemplateResource findTemplateByName(String templateName) {
for (TemplateResource template : getAllTemplates()) {
if (Comparing.equal(template.getFileName(), templateName)) {
return template;
}
}
return null;
}
public void setDefaultTemplate(TemplateResource res) {
myState.defaultTempalteName = res.getFileName();