mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
generate getter/setter by user template
This commit is contained in:
+3
-2
@@ -17,6 +17,7 @@ package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.TailType;
|
||||
import com.intellij.codeInsight.completion.util.ParenthesesInsertHandler;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.codeInsight.lookup.*;
|
||||
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
@@ -394,7 +395,7 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
if (fieldType.equals(varType)) {
|
||||
final String getterName = PropertyUtil.suggestGetterName(field);
|
||||
if ((psiClass.findMethodsByName(getterName, true).length == 0 ||
|
||||
psiClass.findMethodBySignature(PropertyUtil.generateGetterPrototype(field), true) == null)) {
|
||||
psiClass.findMethodBySignature(GenerateMembersUtil.generateGetterPrototype(field), true) == null)) {
|
||||
propertyHandlers.add(getterName);
|
||||
}
|
||||
}
|
||||
@@ -402,7 +403,7 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
if (PsiType.VOID.equals(varType)) {
|
||||
final String setterName = PropertyUtil.suggestSetterName(field);
|
||||
if ((psiClass.findMethodsByName(setterName, true).length == 0 ||
|
||||
psiClass.findMethodBySignature(PropertyUtil.generateSetterPrototype(field), true) == null)) {
|
||||
psiClass.findMethodBySignature(GenerateMembersUtil.generateSetterPrototype(field), true) == null)) {
|
||||
propertyHandlers.add(setterName);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -57,13 +57,13 @@ public class CreateGetterSetterPropertyFromUsageFix extends CreatePropertyFromUs
|
||||
|
||||
@Override
|
||||
protected void beforeTemplateFinished(PsiClass aClass, PsiField field) {
|
||||
PsiMethod getterPrototype = GenerateMembersUtil.generateGetterPrototype(field);
|
||||
PsiMethod getterPrototype = GenerateMembersUtil.generateSimpleGetterPrototype(field);
|
||||
if (aClass.findMethodsBySignature(getterPrototype, false).length == 0) {
|
||||
aClass.add(getterPrototype);
|
||||
}
|
||||
|
||||
|
||||
PsiMethod setterPrototype = GenerateMembersUtil.generateSetterPrototype(field);
|
||||
PsiMethod setterPrototype = GenerateMembersUtil.generateSimpleSetterPrototype(field);
|
||||
if (aClass.findMethodsBySignature(setterPrototype, false).length == 0) {
|
||||
aClass.add(setterPrototype);
|
||||
}
|
||||
|
||||
+2
-2
@@ -227,14 +227,14 @@ public class CreatePropertyFromUsageFix extends CreateFromUsageBaseFix implement
|
||||
PsiElement typeReference;
|
||||
PsiCodeBlock body;
|
||||
if (callText.startsWith(GET_PREFIX) || callText.startsWith(IS_PREFIX)) {
|
||||
accessor = (PsiMethod)targetClass.add(GenerateMembersUtil.generateGetterPrototype(field));
|
||||
accessor = (PsiMethod)targetClass.add(GenerateMembersUtil.generateSimpleGetterPrototype(field));
|
||||
body = accessor.getBody();
|
||||
LOG.assertTrue(body != null, accessor.getText());
|
||||
fieldReference = ((PsiReturnStatement)body.getStatements()[0]).getReturnValue();
|
||||
typeReference = accessor.getReturnTypeElement();
|
||||
}
|
||||
else {
|
||||
accessor = (PsiMethod)targetClass.add(PropertyUtil.generateSetterPrototype(field, targetClass));
|
||||
accessor = (PsiMethod)targetClass.add(GenerateMembersUtil.generateSimpleSetterPrototype(field, targetClass));
|
||||
body = accessor.getBody();
|
||||
LOG.assertTrue(body != null, accessor.getText());
|
||||
PsiAssignmentExpression expr = (PsiAssignmentExpression)((PsiExpressionStatement)body.getStatements()[0]).getExpression();
|
||||
|
||||
+13
@@ -16,9 +16,13 @@
|
||||
package com.intellij.codeInsight.generation;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
@@ -30,6 +34,15 @@ public class GenerateGetterAndSetterHandler extends GenerateGetterSetterHandlerB
|
||||
super(CodeInsightBundle.message("generate.getter.setter.title"));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected JComponent getHeaderPanel(Project project) {
|
||||
final JPanel panel = new JPanel(new BorderLayout(2, 2));
|
||||
panel.add(getHeaderPanel(project, GetterTemplatesManager.getInstance(), CodeInsightBundle.message("generate.getter.template")), BorderLayout.NORTH);
|
||||
panel.add(getHeaderPanel(project, SetterTemplatesManager.getInstance(), CodeInsightBundle.message("generate.setter.template")), BorderLayout.SOUTH);
|
||||
return panel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GenerationInfo[] generateMemberPrototypes(PsiClass aClass, ClassMember original) throws IncorrectOperationException {
|
||||
ArrayList<GenerationInfo> array = new ArrayList<GenerationInfo>();
|
||||
|
||||
@@ -16,9 +16,24 @@
|
||||
package com.intellij.codeInsight.generation;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.ComboBox;
|
||||
import com.intellij.openapi.ui.ComponentWithBrowseButton;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.ui.ListCellRendererWrapper;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.java.generate.template.TemplateResource;
|
||||
import org.jetbrains.java.generate.template.TemplatesManager;
|
||||
import org.jetbrains.java.generate.view.TemplatesPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.Collection;
|
||||
|
||||
public class GenerateGetterHandler extends GenerateGetterSetterHandlerBase {
|
||||
public GenerateGetterHandler() {
|
||||
@@ -33,6 +48,12 @@ public class GenerateGetterHandler extends GenerateGetterSetterHandlerBase {
|
||||
return super.chooseOriginalMembers(aClass, project);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected JComponent getHeaderPanel(final Project project) {
|
||||
return getHeaderPanel(project, GetterTemplatesManager.getInstance(), CodeInsightBundle.message("generate.equals.hashcode.template"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GenerationInfo[] generateMemberPrototypes(PsiClass aClass, ClassMember original) throws IncorrectOperationException {
|
||||
if (original instanceof PropertyClassMember) {
|
||||
|
||||
+51
@@ -19,17 +19,28 @@ import com.intellij.codeInsight.hint.HintManager;
|
||||
import com.intellij.lang.StdLanguages;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.ComboBox;
|
||||
import com.intellij.openapi.ui.ComponentWithBrowseButton;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiEnumConstant;
|
||||
import com.intellij.psi.PsiField;
|
||||
import com.intellij.ui.ListCellRendererWrapper;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.NotNullFunction;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.java.generate.template.TemplateResource;
|
||||
import org.jetbrains.java.generate.template.TemplatesManager;
|
||||
import org.jetbrains.java.generate.view.TemplatesPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
@@ -73,6 +84,46 @@ public abstract class GenerateGetterSetterHandlerBase extends GenerateMembersHan
|
||||
return chooseMembers(allMembers, false, false, project, editor);
|
||||
}
|
||||
|
||||
protected static JComponent getHeaderPanel(final Project project, final TemplatesManager templatesManager, String templatesTitle) {
|
||||
final JPanel panel = new JPanel(new BorderLayout());
|
||||
final JLabel templateChooserLabel = new JLabel(templatesTitle);
|
||||
panel.add(templateChooserLabel, BorderLayout.WEST);
|
||||
final ComboBox comboBox = new ComboBox();
|
||||
templateChooserLabel.setLabelFor(comboBox);
|
||||
comboBox.setRenderer(new ListCellRendererWrapper<TemplateResource>() {
|
||||
@Override
|
||||
public void customize(JList list, TemplateResource value, int index, boolean selected, boolean hasFocus) {
|
||||
setText(value.getName());
|
||||
}
|
||||
});
|
||||
final ComponentWithBrowseButton<ComboBox> comboBoxWithBrowseButton =
|
||||
new ComponentWithBrowseButton<ComboBox>(comboBox, new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
final TemplatesPanel ui = new TemplatesPanel(project, templatesManager);
|
||||
ui.selectNodeInTree(templatesManager.getDefaultTemplate());
|
||||
if (ShowSettingsUtil.getInstance().editConfigurable(panel, ui)) {
|
||||
setComboboxModel(templatesManager, comboBox);
|
||||
}
|
||||
}});
|
||||
|
||||
setComboboxModel(templatesManager, comboBox);
|
||||
comboBox.addActionListener(new ActionListener() {
|
||||
public void actionPerformed(@NotNull final ActionEvent M) {
|
||||
templatesManager.setDefaultTemplate((TemplateResource)comboBox.getSelectedItem());
|
||||
}
|
||||
});
|
||||
|
||||
panel.add(comboBoxWithBrowseButton, BorderLayout.CENTER);
|
||||
return panel;
|
||||
}
|
||||
|
||||
private static void setComboboxModel(TemplatesManager templatesManager, ComboBox comboBox) {
|
||||
final Collection<TemplateResource> templates = templatesManager.getAllTemplates();
|
||||
comboBox.setModel(new DefaultComboBoxModel(templates.toArray(new TemplateResource[templates.size()])));
|
||||
comboBox.setSelectedItem(templatesManager.getDefaultTemplate());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected abstract String getNothingFoundMessage();
|
||||
protected abstract String getNothingAcceptedMessage();
|
||||
|
||||
+7
-1
@@ -45,6 +45,7 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.java.generate.exception.GenerateCodeException;
|
||||
import org.jetbrains.java.generate.template.TemplatesManager;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.ArrayList;
|
||||
@@ -257,12 +258,17 @@ public abstract class GenerateMembersHandlerBase implements CodeInsightActionHan
|
||||
boolean allowEmptySelection,
|
||||
boolean copyJavadocCheckbox,
|
||||
Project project) {
|
||||
MemberChooser<ClassMember> chooser = new MemberChooser<ClassMember>(members, allowEmptySelection, true, project);
|
||||
MemberChooser<ClassMember> chooser = new MemberChooser<ClassMember>(members, allowEmptySelection, true, project, false, getHeaderPanel(project));
|
||||
chooser.setTitle(myChooserTitle);
|
||||
chooser.setCopyJavadocVisible(copyJavadocCheckbox);
|
||||
return chooser;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected JComponent getHeaderPanel(Project project) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected List<? extends GenerationInfo> generateMemberPrototypes(PsiClass aClass, ClassMember[] members) throws IncorrectOperationException {
|
||||
ArrayList<GenerationInfo> array = new ArrayList<GenerationInfo>();
|
||||
|
||||
@@ -51,6 +51,9 @@ import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.java.generate.GenerationUtil;
|
||||
import org.jetbrains.java.generate.element.GenerationHelper;
|
||||
import org.jetbrains.java.generate.template.TemplatesManager;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -584,14 +587,77 @@ public class GenerateMembersUtil {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
//java bean getters/setters
|
||||
public static PsiMethod generateSimpleGetterPrototype(@NotNull PsiField field) {
|
||||
return generatePrototype(field, PropertyUtil.generateGetterPrototype(field));
|
||||
}
|
||||
|
||||
public static PsiMethod generateSimpleSetterPrototype(@NotNull PsiField field) {
|
||||
return generatePrototype(field, PropertyUtil.generateSetterPrototype(field));
|
||||
}
|
||||
|
||||
public static PsiMethod generateSimpleSetterPrototype(PsiField field, PsiClass targetClass) {
|
||||
return generatePrototype(field, PropertyUtil.generateSetterPrototype(field, targetClass));
|
||||
}
|
||||
|
||||
//custom getters/setters
|
||||
public static String suggestGetterName(PsiField field) {
|
||||
final PsiMethod prototype = generateGetterPrototype(field);
|
||||
return prototype != null ? prototype.getName() : PropertyUtil.suggestGetterName(field);
|
||||
}
|
||||
|
||||
public static String suggestGetterName(String name, PsiType type, Project project) {
|
||||
return suggestGetterName(JavaPsiFacade.getElementFactory(project).createField(name, type instanceof PsiEllipsisType ? ((PsiEllipsisType)type).toArrayType() : type));
|
||||
}
|
||||
|
||||
public static String suggestSetterName(PsiField field) {
|
||||
final PsiMethod prototype = generateSetterPrototype(field);
|
||||
return prototype != null ? prototype.getName() : PropertyUtil.suggestSetterName(field);
|
||||
}
|
||||
|
||||
public static String suggestSetterName(String name, PsiType type, Project project) {
|
||||
return suggestSetterName(JavaPsiFacade.getElementFactory(project).createField(name, type instanceof PsiEllipsisType ? ((PsiEllipsisType)type).toArrayType() : type));
|
||||
}
|
||||
|
||||
public static PsiMethod generateGetterPrototype(@NotNull PsiField field) {
|
||||
return setVisibility(field, annotateOnOverrideImplement(field.getContainingClass(), PropertyUtil.generateGetterPrototype(field)));
|
||||
return generatePrototype(field, field.getContainingClass(), GetterTemplatesManager.getInstance());
|
||||
}
|
||||
|
||||
public static PsiMethod generateSetterPrototype(@NotNull PsiField field) {
|
||||
return generateSetterPrototype(field, field.getContainingClass());
|
||||
}
|
||||
|
||||
public static PsiMethod generateSetterPrototype(@NotNull PsiField field, PsiClass aClass) {
|
||||
return generatePrototype(field, aClass, SetterTemplatesManager.getInstance());
|
||||
}
|
||||
|
||||
private static PsiMethod generatePrototype(@NotNull PsiField field,
|
||||
PsiClass psiClass,
|
||||
TemplatesManager templatesManager) {
|
||||
Project project = field.getProject();
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
|
||||
final String methodText = GenerationUtil.velocityGenerateCode(psiClass, Collections.singletonList(field),
|
||||
new HashMap<String, String>(),
|
||||
templatesManager.getDefaultTemplate().getTemplate(), 0, false);
|
||||
|
||||
PsiMethod result;
|
||||
try {
|
||||
result = factory.createMethodFromText(methodText, psiClass);
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
LOG.info(e);
|
||||
result = templatesManager instanceof GetterTemplatesManager ? PropertyUtil.generateGetterPrototype(field)
|
||||
: PropertyUtil.generateSetterPrototype(field);
|
||||
}
|
||||
result = (PsiMethod)CodeStyleManager.getInstance(project).reformat(result);
|
||||
PropertyUtil.annotateWithNullableStuff(field, result);
|
||||
return generatePrototype(field, result);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiMethod generateSetterPrototype(@NotNull PsiField field) {
|
||||
return setVisibility(field, annotateOnOverrideImplement(field.getContainingClass(), PropertyUtil.generateSetterPrototype(field)));
|
||||
private static PsiMethod generatePrototype(@NotNull PsiField field, PsiMethod result) {
|
||||
return setVisibility(field, annotateOnOverrideImplement(field.getContainingClass(), result));
|
||||
}
|
||||
|
||||
@Contract("_, null -> null")
|
||||
|
||||
@@ -16,8 +16,12 @@
|
||||
package com.intellij.codeInsight.generation;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class GenerateSetterHandler extends GenerateGetterSetterHandlerBase {
|
||||
|
||||
@@ -25,6 +29,12 @@ public class GenerateSetterHandler extends GenerateGetterSetterHandlerBase {
|
||||
super(CodeInsightBundle.message("generate.setter.fields.chooser.title"));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
protected JComponent getHeaderPanel(final Project project) {
|
||||
return getHeaderPanel(project, SetterTemplatesManager.getInstance(), CodeInsightBundle.message("generate.equals.hashcode.template"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected GenerationInfo[] generateMemberPrototypes(PsiClass aClass, ClassMember original) throws IncorrectOperationException {
|
||||
if (original instanceof PropertyClassMember) {
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
/*
|
||||
* Copyright 2000-2015 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;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.components.StoragePathMacros;
|
||||
import org.jetbrains.java.generate.exception.TemplateResourceException;
|
||||
import org.jetbrains.java.generate.template.TemplateResource;
|
||||
import org.jetbrains.java.generate.template.TemplatesManager;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@State(
|
||||
name = "GetterTemplates",
|
||||
storages = {
|
||||
@Storage(
|
||||
file = StoragePathMacros.APP_CONFIG + "/getterTemplates.xml"
|
||||
)}
|
||||
)
|
||||
public class GetterTemplatesManager extends TemplatesManager {
|
||||
private static final String DEFAULT = "defaultGetter.vm";
|
||||
|
||||
public static GetterTemplatesManager getInstance() {
|
||||
return ServiceManager.getService(GetterTemplatesManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TemplateResource[] getDefaultTemplates() {
|
||||
try {
|
||||
return new TemplateResource[]{
|
||||
new TemplateResource("IntelliJ Default", readFile(DEFAULT), true),
|
||||
};
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new TemplateResourceException("Error loading default templates", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected static String readFile(String resource) throws IOException {
|
||||
return readFile(resource, GetterTemplatesManager.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright 2000-2015 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;
|
||||
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.components.State;
|
||||
import com.intellij.openapi.components.Storage;
|
||||
import com.intellij.openapi.components.StoragePathMacros;
|
||||
import org.jetbrains.java.generate.exception.TemplateResourceException;
|
||||
import org.jetbrains.java.generate.template.TemplateResource;
|
||||
import org.jetbrains.java.generate.template.TemplatesManager;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@State(
|
||||
name = "SetterTemplates",
|
||||
storages = {
|
||||
@Storage(
|
||||
file = StoragePathMacros.APP_CONFIG + "/setterTemplates.xml"
|
||||
)}
|
||||
)
|
||||
public class SetterTemplatesManager extends TemplatesManager {
|
||||
private static final String DEFAULT = "defaultSetter.vm";
|
||||
private static final String BUILDER = "builderSetter.vm";
|
||||
|
||||
public static TemplatesManager getInstance() {
|
||||
return ServiceManager.getService(SetterTemplatesManager.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TemplateResource[] getDefaultTemplates() {
|
||||
try {
|
||||
return new TemplateResource[]{
|
||||
new TemplateResource("IntelliJ Default", readFile(DEFAULT), true),
|
||||
new TemplateResource("Builder", readFile(BUILDER), true),
|
||||
};
|
||||
}
|
||||
catch (IOException e) {
|
||||
throw new TemplateResourceException("Error loading default templates", e);
|
||||
}
|
||||
}
|
||||
|
||||
protected static String readFile(String resource) throws IOException {
|
||||
return readFile(resource, SetterTemplatesManager.class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
#set($paramName = $helper.getParamName($field, $project))
|
||||
public ##
|
||||
#if($field.modifierStatic)
|
||||
static void ##
|
||||
#else
|
||||
$classname ##
|
||||
#end
|
||||
$helper.suggestSetterName($field, $project)($field.type $paramName) {
|
||||
#if ($field.name == $paramName)
|
||||
#if (!$field.modifierStatic)
|
||||
this.##
|
||||
#else
|
||||
$classname.##
|
||||
#end
|
||||
#end
|
||||
$field.name = $paramName;
|
||||
#if(!$field.modifierStatic)
|
||||
return this;
|
||||
#end
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
public ##
|
||||
#if($field.modifierStatic)
|
||||
static ##
|
||||
#end
|
||||
$field.type $helper.suggestGetterName($field, $project)() {
|
||||
return $field.name;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
#set($paramName = $helper.getParamName($field, $project))
|
||||
public ##
|
||||
#if($field.modifierStatic)
|
||||
static ##
|
||||
#end
|
||||
void $helper.suggestSetterName($field, $project)($field.type $paramName) {
|
||||
#if ($field.name == $paramName)
|
||||
#if (!$field.modifierStatic)
|
||||
this.##
|
||||
#else
|
||||
$classname.##
|
||||
#end
|
||||
#end
|
||||
$field.name = $paramName;
|
||||
}
|
||||
+2
-2
@@ -313,13 +313,13 @@ public class JavaEncapsulateFieldHelper extends EncapsulateFieldHelper {
|
||||
@Override
|
||||
@NotNull
|
||||
public String suggestSetterName(@NotNull PsiField field) {
|
||||
return PropertyUtil.suggestSetterName(field);
|
||||
return GenerateMembersUtil.suggestSetterName(field);
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public String suggestGetterName(@NotNull PsiField field) {
|
||||
return PropertyUtil.suggestGetterName(field);
|
||||
return GenerateMembersUtil.suggestGetterName(field);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+2
-1
@@ -21,6 +21,7 @@ import com.intellij.codeInsight.ExceptionUtil;
|
||||
import com.intellij.codeInsight.NullableNotNullManager;
|
||||
import com.intellij.codeInsight.daemon.impl.analysis.JavaHighlightUtil;
|
||||
import com.intellij.codeInsight.daemon.impl.quickfix.AnonymousTargetClassPreselectionUtil;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.codeInsight.highlighting.HighlightManager;
|
||||
import com.intellij.codeInsight.intention.impl.AddNotNullAnnotationFix;
|
||||
import com.intellij.codeInsight.intention.impl.AddNullableAnnotationFix;
|
||||
@@ -669,7 +670,7 @@ public class ExtractMethodProcessor implements MatchProvider {
|
||||
final List<String> getters = new ArrayList<String>(ContainerUtil.map(initialMethodNames, new Function<String, String>() {
|
||||
@Override
|
||||
public String fun(String propertyName) {
|
||||
return PropertyUtil.suggestGetterName(propertyName, myReturnType);
|
||||
return GenerateMembersUtil.suggestGetterName(propertyName, myReturnType, myProject);
|
||||
}
|
||||
}));
|
||||
ContainerUtil.addIfNotNull(nameByComment, getters);
|
||||
|
||||
+5
-3
@@ -785,8 +785,9 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
|
||||
PsiStatement st = null;
|
||||
final String pureName = getPureName(variable);
|
||||
final int varIdxInOutput = ArrayUtil.find(myOutputVariables, variable);
|
||||
final String getterName = varIdxInOutput > -1 && myOutputFields[varIdxInOutput] != null ? PropertyUtil.suggestGetterName(
|
||||
myOutputFields[varIdxInOutput]) : PropertyUtil.suggestGetterName(pureName, variable.getType());
|
||||
final String getterName = varIdxInOutput > -1 && myOutputFields[varIdxInOutput] != null
|
||||
? GenerateMembersUtil.suggestGetterName(myOutputFields[varIdxInOutput])
|
||||
: GenerateMembersUtil.suggestGetterName(pureName, variable.getType(), myProject);
|
||||
if (isDeclaredInside(variable)) {
|
||||
st = myElementFactory.createStatementFromText(
|
||||
variable.getType().getCanonicalText() + " " + name + " = " + object + "." + getterName + "();",
|
||||
@@ -841,7 +842,8 @@ public class ExtractMethodObjectProcessor extends BaseRefactoringProcessor {
|
||||
if (expression.resolve() == null) {
|
||||
final PsiVariable variable = outVarsNames.get(expression.getReferenceName());
|
||||
if (variable != null) {
|
||||
final String call2Getter = objectName + "." + PropertyUtil.suggestGetterName(getPureName(variable), variable.getType()) + "()";
|
||||
final String call2Getter = objectName + "." + GenerateMembersUtil.suggestGetterName(getPureName(variable), variable.getType(),
|
||||
myProject) + "()";
|
||||
final PsiExpression callToGetter = myElementFactory.createExpressionFromText(call2Getter, variable);
|
||||
replaceMap.put(expression, callToGetter);
|
||||
}
|
||||
|
||||
@@ -597,7 +597,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
final String qualifiedName = StringUtil.getQualifiedName(newPackageName, newClassName);
|
||||
@NonNls String getter = null;
|
||||
if (myGenerateAccessors) {
|
||||
getter = PropertyUtil.suggestGetterName(field);
|
||||
getter = GenerateMembersUtil.suggestGetterName(field);
|
||||
} else {
|
||||
final PsiMethod fieldGetter = PropertyUtil.findPropertyGetter(sourceClass, field.getName(), false, false);
|
||||
if (fieldGetter != null && isInMovedElement(fieldGetter)) {
|
||||
@@ -607,7 +607,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
|
||||
@NonNls String setter = null;
|
||||
if (myGenerateAccessors) {
|
||||
setter = PropertyUtil.suggestSetterName(field);
|
||||
setter = GenerateMembersUtil.suggestSetterName(field);
|
||||
} else {
|
||||
final PsiMethod fieldSetter = PropertyUtil.findPropertySetter(sourceClass, field.getName(), false, false);
|
||||
if (fieldSetter != null && isInMovedElement(fieldSetter)) {
|
||||
@@ -871,11 +871,11 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor {
|
||||
}
|
||||
|
||||
private boolean hasGetter(final PsiField field) {
|
||||
return hasGetterOrSetter(sourceClass.findMethodsBySignature(PropertyUtil.generateGetterPrototype(field), false));
|
||||
return hasGetterOrSetter(sourceClass.findMethodsBySignature(GenerateMembersUtil.generateGetterPrototype(field), false));
|
||||
}
|
||||
|
||||
private boolean hasSetter(final PsiField field) {
|
||||
return hasGetterOrSetter(sourceClass.findMethodsBySignature(PropertyUtil.generateSetterPrototype(field), false));
|
||||
return hasGetterOrSetter(sourceClass.findMethodsBySignature(GenerateMembersUtil.generateSetterPrototype(field), false));
|
||||
}
|
||||
|
||||
protected abstract boolean hasGetterOrSetter(final PsiMethod[] getters);
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
*/
|
||||
package com.intellij.refactoring.extractclass;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.refactoring.extractclass.usageInfo.ReplaceStaticVariableAccess;
|
||||
@@ -64,7 +64,7 @@ public class ExtractEnumProcessor {
|
||||
@Override
|
||||
public void fixUsage() throws IncorrectOperationException {
|
||||
final PsiReferenceExpression expression = (PsiReferenceExpression)element;
|
||||
final String link = PropertyUtil.suggestGetterName("value", expression.getType()) + "()";
|
||||
final String link = GenerateMembersUtil.suggestGetterName("value", expression.getType(), myProject) + "()";
|
||||
MutationUtils.replaceExpression(expression.getReferenceName() + "." + link, expression);
|
||||
}
|
||||
});
|
||||
|
||||
+10
-9
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.refactoring.extractclass;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
@@ -169,7 +170,7 @@ class ExtractedClassBuilder {
|
||||
}
|
||||
|
||||
private String getterName() {//todo unique getterName: see also com.intellij.refactoring.extractclass.usageInfo.ReplaceStaticVariableAccess
|
||||
return PropertyUtil.suggestGetterName("value", myEnumParameterType);
|
||||
return GenerateMembersUtil.suggestGetterName("value", myEnumParameterType, myProject);
|
||||
}
|
||||
|
||||
private boolean hasEnumConstants() {
|
||||
@@ -286,12 +287,12 @@ class ExtractedClassBuilder {
|
||||
field.accept(new Mutator(out));
|
||||
|
||||
if (myFieldsNeedingGetter != null && myFieldsNeedingGetter.contains(field)) {
|
||||
out.append(PropertyUtil.generateGetterPrototype(field).getText());
|
||||
out.append(GenerateMembersUtil.generateGetterPrototype(field).getText());
|
||||
out.append("\n");
|
||||
}
|
||||
|
||||
if (myFieldsNeedingSetters != null && myFieldsNeedingSetters.contains(field)) {
|
||||
out.append(PropertyUtil.generateSetterPrototype(field).getText());
|
||||
out.append(GenerateMembersUtil.generateSetterPrototype(field).getText());
|
||||
out.append("\n");
|
||||
}
|
||||
}
|
||||
@@ -433,7 +434,7 @@ class ExtractedClassBuilder {
|
||||
}
|
||||
}
|
||||
else {
|
||||
out.append(backPointerName + '.' + PropertyUtil.suggestGetterName(field) + "()");
|
||||
out.append(backPointerName + '.' + GenerateMembersUtil.suggestGetterName(field) + "()");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -476,16 +477,16 @@ class ExtractedClassBuilder {
|
||||
private void delegate(final PsiExpression rhs, final PsiField field, final PsiJavaToken sign, final IElementType tokenType,
|
||||
final String fieldName) {
|
||||
if (tokenType.equals(JavaTokenType.EQ)) {
|
||||
final String setterName = PropertyUtil.suggestSetterName(field);
|
||||
final String setterName = GenerateMembersUtil.suggestSetterName(field);
|
||||
out.append(fieldName + '.' + setterName + '(');
|
||||
rhs.accept(this);
|
||||
out.append(')');
|
||||
}
|
||||
else {
|
||||
final String operator = sign.getText().substring(0, sign.getTextLength() - 1);
|
||||
final String setterName = PropertyUtil.suggestSetterName(field);
|
||||
final String setterName = GenerateMembersUtil.suggestSetterName(field);
|
||||
out.append(fieldName + '.' + setterName + '(');
|
||||
final String getterName = PropertyUtil.suggestGetterName(field);
|
||||
final String getterName = GenerateMembersUtil.suggestGetterName(field);
|
||||
out.append(fieldName + '.' + getterName + "()");
|
||||
out.append(operator);
|
||||
rhs.accept(this);
|
||||
@@ -521,10 +522,10 @@ class ExtractedClassBuilder {
|
||||
assert field != null;
|
||||
if (!field.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
out.append(backPointerName +
|
||||
'.' + PropertyUtil.suggestSetterName(field) +
|
||||
'.' + GenerateMembersUtil.suggestSetterName(field) +
|
||||
'(' +
|
||||
backPointerName +
|
||||
'.' + PropertyUtil.suggestGetterName(field) +
|
||||
'.' + GenerateMembersUtil.suggestGetterName(field) +
|
||||
"()" +
|
||||
operator +
|
||||
"1)");
|
||||
|
||||
+2
-2
@@ -15,9 +15,9 @@
|
||||
*/
|
||||
package com.intellij.refactoring.extractclass.usageInfo;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.psi.MutationUtils;
|
||||
import com.intellij.refactoring.util.FixableUsageInfo;
|
||||
@@ -46,7 +46,7 @@ public class ReplaceStaticVariableAccess extends FixableUsageInfo {
|
||||
}
|
||||
}
|
||||
final boolean replaceWithGetEnumValue = myEnumConstant && !alreadyMigratedToEnum();
|
||||
final String link = replaceWithGetEnumValue ? "." + PropertyUtil.suggestGetterName("value", expression.getType()) + "()" : "";
|
||||
final String link = replaceWithGetEnumValue ? "." + GenerateMembersUtil.suggestGetterName("value", expression.getType(), expression.getProject()) + "()" : "";
|
||||
MutationUtils.replaceExpression(delegateClass + '.' + expression.getReferenceName() + link, expression);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -118,7 +118,7 @@ public class InheritanceToDelegationProcessor extends BaseRefactoringProcessor {
|
||||
|
||||
myFieldName = fieldName;
|
||||
final String propertyName = JavaCodeStyleManager.getInstance(myProject).variableNameToPropertyName(myFieldName, VariableKind.FIELD);
|
||||
myGetterName = PropertyUtil.suggestGetterName(propertyName, myBaseClassType);
|
||||
myGetterName = GenerateMembersUtil.suggestGetterName(propertyName, myBaseClassType, myProject);
|
||||
myGenerateGetter = generateGetter;
|
||||
|
||||
myDelegatedInterfaces = new LinkedHashSet<PsiClass>();
|
||||
|
||||
+2
-1
@@ -17,6 +17,7 @@ package com.intellij.refactoring.introduceParameter;
|
||||
|
||||
import com.intellij.analysis.AnalysisScope;
|
||||
import com.intellij.codeInsight.ChangeContextUtil;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.lang.findUsages.DescriptiveNameUtil;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
@@ -278,7 +279,7 @@ public class IntroduceParameterProcessor extends BaseRefactoringProcessor implem
|
||||
//check getter access instead
|
||||
final PsiClass psiClass = ((PsiField)element).getContainingClass();
|
||||
LOG.assertTrue(psiClass != null);
|
||||
final PsiMethod method = psiClass.findMethodBySignature(PropertyUtil.generateGetterPrototype((PsiField)element), true);
|
||||
final PsiMethod method = psiClass.findMethodBySignature(GenerateMembersUtil.generateGetterPrototype((PsiField)element), true);
|
||||
if (method != null){
|
||||
element = method;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
*/
|
||||
package com.intellij.refactoring.introduceParameter;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.search.searches.OverridingMethodsSearch;
|
||||
import com.intellij.psi.search.searches.ReferencesSearch;
|
||||
@@ -100,7 +101,7 @@ public class Util {
|
||||
|
||||
if (e instanceof PsiField) {
|
||||
PsiField psiField = (PsiField)e;
|
||||
PsiMethod getterPrototype = PropertyUtil.generateGetterPrototype(psiField);
|
||||
PsiMethod getterPrototype = GenerateMembersUtil.generateGetterPrototype(psiField);
|
||||
|
||||
PsiMethod getter = psiField.getContainingClass().findMethodBySignature(getterPrototype, true);
|
||||
|
||||
|
||||
+3
-2
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.refactoring.introduceparameterobject;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.ide.highlighter.JavaFileType;
|
||||
import com.intellij.ide.util.PackageUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
@@ -211,12 +212,12 @@ public class IntroduceParameterObjectProcessor extends FixableUsagesRefactoringP
|
||||
|
||||
@NonNls String getter = parameterChunk != null ? parameterChunk.getter : null;
|
||||
if (getter == null) {
|
||||
getter = PropertyUtil.suggestGetterName(replacedParameter.getName(), replacedParameter.getType());
|
||||
getter = GenerateMembersUtil.suggestGetterName(replacedParameter.getName(), replacedParameter.getType(), myProject);
|
||||
paramsNeedingGetters.add(replacedParameter);
|
||||
}
|
||||
@NonNls String setter = parameterChunk != null ? parameterChunk.setter : null;
|
||||
if (setter == null) {
|
||||
setter = PropertyUtil.suggestSetterName(replacedParameter.getName());
|
||||
setter = GenerateMembersUtil.suggestSetterName(replacedParameter.getName(), replacedParameter.getType(), myProject);
|
||||
}
|
||||
if (RefactoringUtil.isPlusPlusOrMinusMinus(paramUsage.getParent())) {
|
||||
usages.add(new ReplaceParameterIncrementDecrement(paramUsage, fixedParamName, setter, getter));
|
||||
|
||||
+18
-79
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.refactoring.introduceparameterobject;
|
||||
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
@@ -46,7 +47,9 @@ class ParameterObjectBuilder {
|
||||
}
|
||||
|
||||
public void addField(PsiParameter variable, String name, PsiType type, boolean setterRequired) {
|
||||
final ParameterSpec field = new ParameterSpec(variable, name, type, setterRequired);
|
||||
final String propertyName = myJavaCodeStyleManager.variableNameToPropertyName(name, VariableKind.PARAMETER);
|
||||
final ParameterSpec field = new ParameterSpec(variable, myJavaCodeStyleManager.propertyNameToVariableName(propertyName, VariableKind.FIELD),
|
||||
type instanceof PsiEllipsisType ? ((PsiEllipsisType)type).toArrayType() : type, setterRequired);
|
||||
fields.add(field);
|
||||
}
|
||||
|
||||
@@ -110,27 +113,7 @@ class ParameterObjectBuilder {
|
||||
if (!field.isSetterRequired()) {
|
||||
return;
|
||||
}
|
||||
final PsiParameter parameter = field.getParameter();
|
||||
final PsiType type = field.getType();
|
||||
final String typeText;
|
||||
if (parameter.isVarArgs()) {
|
||||
typeText = ((PsiArrayType) type).getComponentType().getCanonicalText() + "...";
|
||||
} else {
|
||||
typeText = type.getCanonicalText();
|
||||
}
|
||||
final String name = calculateStrippedName(field.getName());
|
||||
final String capitalizedName = StringUtil.capitalize(name);
|
||||
final String parameterName =
|
||||
myJavaCodeStyleManager.propertyNameToVariableName(name, VariableKind.PARAMETER);
|
||||
|
||||
out.append("\tpublic void set" + capitalizedName + '(');
|
||||
outputAnnotationString(parameter, out);
|
||||
out.append(CodeStyleSettingsManager.getSettings(myProject).GENERATE_FINAL_PARAMETERS?"final " : "");
|
||||
out.append(' ' +typeText + ' ' + parameterName + ")\n");
|
||||
out.append("\t{\n");
|
||||
final String fieldName = myJavaCodeStyleManager.propertyNameToVariableName(name, VariableKind.FIELD);
|
||||
generateFieldAssignment(out, parameterName, fieldName);
|
||||
out.append("\t}\n");
|
||||
out.append(GenerateMembersUtil.generateSetterPrototype(JavaPsiFacade.getElementFactory(myProject).createField(field.getName(), field.getType())).getText());
|
||||
}
|
||||
|
||||
private static void generateFieldAssignment(final StringBuffer out, final String parameterName, final String fieldName) {
|
||||
@@ -141,56 +124,22 @@ class ParameterObjectBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
@NonNls
|
||||
private String calculateStrippedName(String name) {
|
||||
return myJavaCodeStyleManager.variableNameToPropertyName(name, VariableKind.PARAMETER);
|
||||
}
|
||||
|
||||
private void outputGetter(ParameterSpec field, @NonNls StringBuffer out) {
|
||||
final PsiParameter parameter = field.getParameter();
|
||||
final PsiType type = field.getType();
|
||||
final String typeText;
|
||||
if (parameter.isVarArgs()) {
|
||||
typeText = ((PsiArrayType) type).getComponentType().getCanonicalText() + "[]";
|
||||
} else {
|
||||
typeText = type.getCanonicalText();
|
||||
}
|
||||
final String name = calculateStrippedName(field.getName());
|
||||
final String capitalizedName = StringUtil.capitalize(name);
|
||||
if (PsiType.BOOLEAN.equals(type)) {
|
||||
out.append('\t');
|
||||
outputAnnotationString(parameter, out);
|
||||
out.append(" public "+ typeText + " is" + capitalizedName + "()\n");
|
||||
} else {
|
||||
out.append('\t');
|
||||
outputAnnotationString(parameter, out);
|
||||
out.append(" public " +typeText + " get" + capitalizedName + "()\n");
|
||||
}
|
||||
out.append("\t{\n");
|
||||
final String fieldName = myJavaCodeStyleManager.propertyNameToVariableName(name, VariableKind.FIELD);
|
||||
out.append("\t\treturn " + fieldName + ";\n");
|
||||
out.append("\t}\n");
|
||||
private void outputGetter(ParameterSpec field, @NonNls StringBuffer out) {
|
||||
out.append(GenerateMembersUtil.generateGetterPrototype(JavaPsiFacade.getElementFactory(myProject).createField(field.getName(), field.getType())).getText());
|
||||
}
|
||||
|
||||
private void outputConstructor(@NonNls StringBuffer out) {
|
||||
out.append("\t" + myVisibility + " " + className + '(');
|
||||
for (Iterator<ParameterSpec> iterator = fields.iterator(); iterator.hasNext();) {
|
||||
final ParameterSpec field = iterator.next();
|
||||
final PsiParameter parameter = field.getParameter();
|
||||
final ParameterSpec field = iterator.next();
|
||||
final PsiParameter parameter = field.getParameter();
|
||||
outputAnnotationString(parameter, out);
|
||||
out.append(CodeStyleSettingsManager.getSettings(myProject).GENERATE_FINAL_PARAMETERS ? " final " : "");
|
||||
|
||||
final PsiType type = field.getType();
|
||||
final String typeText;
|
||||
if (parameter.isVarArgs()) {
|
||||
typeText = ((PsiArrayType) type).getComponentType().getCanonicalText() + "...";
|
||||
} else {
|
||||
typeText = type.getCanonicalText();
|
||||
}
|
||||
final String name = calculateStrippedName(field.getName());
|
||||
final String parameterName =
|
||||
myJavaCodeStyleManager.propertyNameToVariableName(name, VariableKind.PARAMETER);
|
||||
out.append(' ' +typeText + ' ' + parameterName);
|
||||
final String parameterName = parameter.getName();
|
||||
final PsiType type = field.getType();
|
||||
final PsiType fieldType = parameter.isVarArgs() && type instanceof PsiArrayType ?
|
||||
PsiEllipsisType.createEllipsis(((PsiArrayType)type).getComponentType(), PsiAnnotation.EMPTY_ARRAY) : type;
|
||||
out.append(' ' + fieldType.getCanonicalText() + ' ' + parameterName);
|
||||
if (iterator.hasNext()) {
|
||||
out.append(", ");
|
||||
}
|
||||
@@ -198,11 +147,7 @@ class ParameterObjectBuilder {
|
||||
out.append(")\n");
|
||||
out.append("\t{\n");
|
||||
for (final ParameterSpec field : fields) {
|
||||
final String name = calculateStrippedName(field.getName());
|
||||
final String fieldName = myJavaCodeStyleManager.propertyNameToVariableName(name, VariableKind.FIELD);
|
||||
final String parameterName =
|
||||
myJavaCodeStyleManager.propertyNameToVariableName(name, VariableKind.PARAMETER);
|
||||
generateFieldAssignment(out, parameterName, fieldName);
|
||||
generateFieldAssignment(out, field.getParameter().getName(), field.getName());
|
||||
}
|
||||
out.append("\t}\n");
|
||||
}
|
||||
@@ -215,20 +160,14 @@ class ParameterObjectBuilder {
|
||||
out.append('\n');
|
||||
}
|
||||
final PsiType type = field.getType();
|
||||
final String typeText;
|
||||
if (parameter.isVarArgs()) {
|
||||
final PsiType componentType = ((PsiArrayType) type).getComponentType();
|
||||
typeText = componentType.getCanonicalText() + "[]";
|
||||
} else {
|
||||
typeText = type.getCanonicalText();
|
||||
}
|
||||
final String name = calculateStrippedName(field.getName());
|
||||
final String typeText = type.getCanonicalText();
|
||||
final String name = field.getName();
|
||||
@NonNls String modifierString = "private ";
|
||||
if (!field.isSetterRequired()) {
|
||||
modifierString += "final ";
|
||||
}
|
||||
outputAnnotationString(parameter, out);
|
||||
out.append('\t' + modifierString + typeText + ' ' + myJavaCodeStyleManager.propertyNameToVariableName(name, VariableKind.FIELD) + ";\n");
|
||||
out.append('\t' + modifierString + typeText + ' ' + name + ";\n");
|
||||
}
|
||||
|
||||
private void outputAnnotationString(PsiParameter parameter, StringBuffer out) {
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ package com.intellij.refactoring.introduceparameterobject;
|
||||
|
||||
import com.intellij.psi.PsiParameter;
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
|
||||
class ParameterSpec {
|
||||
private final PsiParameter myParameter;
|
||||
|
||||
+1
-2
@@ -65,8 +65,7 @@ public class RemoveMiddlemanProcessor extends FixableUsagesRefactoringProcessor
|
||||
for (final MemberInfo memberInfo : myDelegateMethodInfos) {
|
||||
if (!memberInfo.isChecked()) continue;
|
||||
final PsiMethod method = (PsiMethod)memberInfo.getMember();
|
||||
final Project project = method.getProject();
|
||||
final String getterName = PropertyUtil.suggestGetterName(field);
|
||||
final String getterName = GenerateMembersUtil.suggestGetterName(field);
|
||||
final int[] paramPermutation = DelegationUtils.getParameterPermutation(method);
|
||||
final PsiMethod delegatedMethod = DelegationUtils.getDelegatedMethod(method);
|
||||
LOG.assertTrue(!DelegationUtils.isAbstract(method));
|
||||
|
||||
@@ -26,13 +26,14 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.*;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.beans.Introspector;
|
||||
import java.util.*;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @author Mike
|
||||
@@ -404,7 +405,8 @@ public class PropertyUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* Consider using {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateGetterPrototype(com.intellij.psi.PsiField)}
|
||||
* Consider using {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateGetterPrototype(com.intellij.psi.PsiField)} or
|
||||
* {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateSimpleGetterPrototype(com.intellij.psi.PsiField)}
|
||||
* to add @Override annotation
|
||||
*/
|
||||
@Nullable
|
||||
@@ -435,6 +437,7 @@ public class PropertyUtil {
|
||||
|
||||
/**
|
||||
* Consider using {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateSetterPrototype(com.intellij.psi.PsiField)}
|
||||
* or {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateSimpleSetterPrototype(com.intellij.psi.PsiField)}
|
||||
* to add @Override annotation
|
||||
*/
|
||||
@Nullable
|
||||
@@ -444,6 +447,7 @@ public class PropertyUtil {
|
||||
|
||||
/**
|
||||
* Consider using {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateSetterPrototype(com.intellij.psi.PsiField)}
|
||||
* or {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateSimpleSetterPrototype(com.intellij.psi.PsiField)}
|
||||
* to add @Override annotation
|
||||
*/
|
||||
@Nullable
|
||||
@@ -453,6 +457,7 @@ public class PropertyUtil {
|
||||
|
||||
/**
|
||||
* Consider using {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateSetterPrototype(com.intellij.psi.PsiField)}
|
||||
* or {@link com.intellij.codeInsight.generation.GenerateMembersUtil#generateSimpleSetterPrototype(com.intellij.psi.PsiField)}
|
||||
* to add @Override annotation
|
||||
*/
|
||||
@Nullable
|
||||
@@ -512,8 +517,8 @@ public class PropertyUtil {
|
||||
}
|
||||
}
|
||||
|
||||
private static void annotateWithNullableStuff(final PsiModifierListOwner field,
|
||||
final PsiModifierListOwner listOwner)
|
||||
public static void annotateWithNullableStuff(final PsiModifierListOwner field,
|
||||
final PsiModifierListOwner listOwner)
|
||||
throws IncorrectOperationException {
|
||||
final NullableNotNullManager manager = NullableNotNullManager.getInstance(field.getProject());
|
||||
final PsiAnnotation notNull = manager.copyNotNullAnnotation(field);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.codeInsight
|
||||
import com.intellij.codeInsight.generation.ClassMember
|
||||
import com.intellij.codeInsight.generation.GenerateGetterHandler
|
||||
import com.intellij.codeInsight.generation.GenerateSetterHandler
|
||||
import com.intellij.openapi.command.WriteCommandAction
|
||||
import com.intellij.openapi.editor.Editor
|
||||
import com.intellij.openapi.project.Project
|
||||
@@ -106,4 +107,48 @@ class Foo {
|
||||
})
|
||||
UIUtil.dispatchAllInvocationEvents()
|
||||
}
|
||||
|
||||
public void "test static or this setter with same name parameter"() {
|
||||
myFixture.enableInspections(UnqualifiedFieldAccessInspection.class)
|
||||
myFixture.configureByText 'a.java', '''
|
||||
class Foo {
|
||||
static int p;
|
||||
int f;
|
||||
|
||||
<caret>
|
||||
}
|
||||
'''
|
||||
generateSetter()
|
||||
myFixture.checkResult '''
|
||||
class Foo {
|
||||
static int p;
|
||||
int f;
|
||||
|
||||
public static void setP(int p) {
|
||||
Foo.p = p;
|
||||
}
|
||||
|
||||
public void setF(int f) {
|
||||
this.f = f;
|
||||
}
|
||||
}
|
||||
'''
|
||||
}
|
||||
|
||||
private void generateSetter() {
|
||||
WriteCommandAction.runWriteCommandAction(getProject(), {
|
||||
new GenerateSetterHandler() {
|
||||
@Override
|
||||
protected ClassMember[] chooseMembers(
|
||||
ClassMember[] members,
|
||||
boolean allowEmptySelection,
|
||||
boolean copyJavadocCheckbox,
|
||||
Project project,
|
||||
@Nullable @Nullable Editor editor) {
|
||||
return members
|
||||
}
|
||||
}.invoke(project, myFixture.editor, myFixture.file)
|
||||
})
|
||||
UIUtil.dispatchAllInvocationEvents()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
package com.intellij.refactoring;
|
||||
|
||||
import com.intellij.JavaTestUtil;
|
||||
import com.intellij.codeInsight.generation.GenerateMembersUtil;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
@@ -123,10 +124,10 @@ public class EncapsulateFieldsTest extends MultiFileTestCase{
|
||||
public FieldDescriptor[] getSelectedFields() {
|
||||
return new FieldDescriptor[]{new FieldDescriptorImpl(
|
||||
field,
|
||||
PropertyUtil.suggestGetterName(field),
|
||||
PropertyUtil.suggestSetterName(field),
|
||||
isToEncapsulateGet() ? PropertyUtil.generateGetterPrototype(field) : null,
|
||||
isToEncapsulateSet() ? PropertyUtil.generateSetterPrototype(field) : null
|
||||
GenerateMembersUtil.suggestGetterName(field),
|
||||
GenerateMembersUtil.suggestSetterName(field),
|
||||
isToEncapsulateGet() ? GenerateMembersUtil.generateGetterPrototype(field) : null,
|
||||
isToEncapsulateSet() ? GenerateMembersUtil.generateSetterPrototype(field) : null
|
||||
)};
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +53,8 @@ generate.equals.compare.arrays.comment= // Probably incorrect - comparing Object
|
||||
generate.getter.setter.title=Select Fields to Generate Getters and Setters
|
||||
generate.getter.fields.chooser.title=Select Fields to Generate Getters
|
||||
generate.setter.fields.chooser.title=Select Fields to Generate Setters
|
||||
generate.setter.template=&Setter template:
|
||||
generate.getter.template=&Getter template:
|
||||
override.implement.broken.file.template.message=Please Correct "Overridden/Implemented Method Body" Template
|
||||
override.implement.broken.file.template.title=File Template Error
|
||||
methods.to.implement.chooser.title=Select Methods to Implement
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.generation.PsiElementClassMember;
|
||||
import com.intellij.codeInsight.generation.PsiFieldMember;
|
||||
import com.intellij.codeInsight.generation.PsiMethodMember;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -175,7 +176,11 @@ public class GenerationUtil {
|
||||
|
||||
// field information
|
||||
logger.debug("Velocity Context - adding fields");
|
||||
vc.put("fields", ElementUtils.getOnlyAsFieldElements(selectedMembers, selectedNotNullMembers, useAccessors));
|
||||
final List<FieldElement> fieldElements = ElementUtils.getOnlyAsFieldElements(selectedMembers, selectedNotNullMembers, useAccessors);
|
||||
vc.put("fields", fieldElements);
|
||||
if (fieldElements.size() == 1) {
|
||||
vc.put("field", fieldElements.get(0));
|
||||
}
|
||||
|
||||
// method information
|
||||
logger.debug("Velocity Context - adding methods");
|
||||
@@ -200,6 +205,7 @@ public class GenerationUtil {
|
||||
vc.put("FQClassname", ce.getQualifiedName());
|
||||
vc.put("settings", CodeStyleSettingsManager.getSettings(clazz.getProject()));
|
||||
vc.put("helper", GenerationHelper.class);
|
||||
vc.put("project", clazz.getProject());
|
||||
|
||||
for (String paramName : contextMap.keySet()) {
|
||||
vc.put(paramName, contextMap.get(paramName));
|
||||
@@ -218,6 +224,9 @@ public class GenerationUtil {
|
||||
params.put("autoImportPackages", (String)vc.get("autoImportPackages"));
|
||||
}
|
||||
}
|
||||
catch (ProcessCanceledException e) {
|
||||
throw e;
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new GenerateCodeException("Error in Velocity code generator", e);
|
||||
}
|
||||
|
||||
+10
@@ -46,6 +46,7 @@ public abstract class AbstractElement implements Element {
|
||||
protected boolean isByte;
|
||||
protected boolean isShort;
|
||||
protected String typeName;
|
||||
protected String type;
|
||||
protected String typeQualifiedName;
|
||||
protected boolean isModifierStatic;
|
||||
protected boolean isModifierPublic;
|
||||
@@ -133,6 +134,15 @@ public abstract class AbstractElement implements Element {
|
||||
return typeQualifiedName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(String type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public boolean isBoolean() {
|
||||
return isBoolean;
|
||||
}
|
||||
|
||||
@@ -174,5 +174,10 @@ public interface Element {
|
||||
*/
|
||||
String getTypeQualifiedName();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return type canonical text
|
||||
*/
|
||||
String getType();
|
||||
|
||||
}
|
||||
|
||||
@@ -147,6 +147,7 @@ public class ElementFactory {
|
||||
// type names
|
||||
element.setTypeName(PsiAdapter.getTypeClassName(type));
|
||||
element.setTypeQualifiedName(PsiAdapter.getTypeQualifiedClassName(type));
|
||||
element.setType(type.getCanonicalText());
|
||||
|
||||
// arrays, collections and maps types
|
||||
if (PsiAdapter.isObjectArrayType(type)) {
|
||||
|
||||
+26
@@ -15,7 +15,12 @@
|
||||
*/
|
||||
package org.jetbrains.java.generate.element;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleSettings;
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||
import com.intellij.psi.codeStyle.VariableKind;
|
||||
import com.intellij.psi.util.PropertyUtil;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -45,4 +50,25 @@ public class GenerationHelper {
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
public static String getParamName(FieldElement fieldElement, Project project) {
|
||||
String name = fieldElement.getName();
|
||||
JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(project);
|
||||
String propertyName = codeStyleManager.variableNameToPropertyName(name, VariableKind.FIELD);
|
||||
return codeStyleManager.propertyNameToVariableName(propertyName, VariableKind.PARAMETER);
|
||||
}
|
||||
|
||||
public static String suggestGetterName(FieldElement fieldElement, Project project) {
|
||||
String text = fieldElement.isModifierStatic() ? "static " : "";
|
||||
text += fieldElement.getType() + " " + fieldElement.getName();
|
||||
final PsiField field = JavaPsiFacade.getElementFactory(project).createFieldFromText(text, null);
|
||||
return PropertyUtil.suggestGetterName(field);
|
||||
}
|
||||
|
||||
public static String suggestSetterName(FieldElement fieldElement, Project project) {
|
||||
String text = fieldElement.isModifierStatic() ? "static " : "";
|
||||
text += fieldElement.getType() + " " + fieldElement.getName();
|
||||
final PsiField field = JavaPsiFacade.getElementFactory(project).createFieldFromText(text, null);
|
||||
return PropertyUtil.suggestSetterName(field);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.jetbrains.annotations.Nls;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.java.generate.template.TemplateResource;
|
||||
import org.jetbrains.java.generate.template.TemplatesManager;
|
||||
import org.jetbrains.java.generate.template.toString.ToStringTemplatesManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -77,13 +78,19 @@ public class TemplatesPanel extends NamedItemsListEditor<TemplateResource> {
|
||||
}
|
||||
};
|
||||
private final Project myProject;
|
||||
private final TemplatesManager myTemplatesManager;
|
||||
|
||||
public TemplatesPanel(Project project) {
|
||||
this(project, ToStringTemplatesManager.getInstance());
|
||||
}
|
||||
|
||||
public TemplatesPanel(Project project, TemplatesManager templatesManager) {
|
||||
super(NAMER, FACTORY, CLONER, COMPARER,
|
||||
new ArrayList<TemplateResource>(ToStringTemplatesManager.getInstance().getAllTemplates()));
|
||||
new ArrayList<TemplateResource>(templatesManager.getAllTemplates()));
|
||||
|
||||
//ServiceManager.getService(project, MasterDetailsStateService.class).register("ToStringTemplates.UI", this);
|
||||
myProject = project;
|
||||
myTemplatesManager = templatesManager;
|
||||
}
|
||||
|
||||
@Nls
|
||||
@@ -104,7 +111,7 @@ public class TemplatesPanel extends NamedItemsListEditor<TemplateResource> {
|
||||
|
||||
@Override
|
||||
public boolean isModified() {
|
||||
return super.isModified() || !Comparing.equal(ToStringTemplatesManager.getInstance().getDefaultTemplate(), getSelectedItem());
|
||||
return super.isModified() || !Comparing.equal(myTemplatesManager.getDefaultTemplate(), getSelectedItem());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -119,10 +126,10 @@ public class TemplatesPanel extends NamedItemsListEditor<TemplateResource> {
|
||||
@Override
|
||||
public void apply() throws ConfigurationException {
|
||||
super.apply();
|
||||
ToStringTemplatesManager.getInstance().setTemplates(getItems());
|
||||
myTemplatesManager.setTemplates(getItems());
|
||||
final TemplateResource selection = getSelectedItem();
|
||||
if (selection != null) {
|
||||
ToStringTemplatesManager.getInstance().setDefaultTemplate(selection);
|
||||
myTemplatesManager.setDefaultTemplate(selection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -43,7 +43,7 @@ public class JavaFxGetterSetterPrototypeProvider extends GetterSetterPrototypePr
|
||||
public PsiMethod[] generateGetters(PsiField field) {
|
||||
final Project project = field.getProject();
|
||||
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
|
||||
final PsiMethod getter = GenerateMembersUtil.generateGetterPrototype(field);
|
||||
final PsiMethod getter = GenerateMembersUtil.generateSimpleGetterPrototype(field);
|
||||
|
||||
final PsiType wrappedType = JavaFxPsiUtil.getWrappedPropertyType(field, project, JavaFxCommonClassNames.ourReadOnlyMap);
|
||||
|
||||
@@ -62,7 +62,7 @@ public class JavaFxGetterSetterPrototypeProvider extends GetterSetterPrototypePr
|
||||
|
||||
@Override
|
||||
public PsiMethod[] generateSetters(PsiField field) {
|
||||
final PsiMethod setter = GenerateMembersUtil.generateSetterPrototype(field);
|
||||
final PsiMethod setter = GenerateMembersUtil.generateSimpleSetterPrototype(field);
|
||||
final Project project = field.getProject();
|
||||
|
||||
final PsiType wrappedType = JavaFxPsiUtil.getWrappedPropertyType(field, project, JavaFxCommonClassNames.ourWritableMap);
|
||||
|
||||
@@ -1566,6 +1566,10 @@
|
||||
serviceImplementation="org.jetbrains.java.generate.template.toString.ToStringTemplatesManager"/>
|
||||
<applicationService serviceInterface="com.intellij.codeInsight.generation.EqualsHashCodeTemplatesManager"
|
||||
serviceImplementation="com.intellij.codeInsight.generation.EqualsHashCodeTemplatesManager"/>
|
||||
<applicationService serviceInterface="com.intellij.codeInsight.generation.GetterTemplatesManager"
|
||||
serviceImplementation="com.intellij.codeInsight.generation.GetterTemplatesManager"/>
|
||||
<applicationService serviceInterface="com.intellij.codeInsight.generation.SetterTemplatesManager"
|
||||
serviceImplementation="com.intellij.codeInsight.generation.SetterTemplatesManager"/>
|
||||
<applicationService serviceInterface="org.jetbrains.java.generate.GenerateToStringActionHandler"
|
||||
serviceImplementation="org.jetbrains.java.generate.GenerateToStringActionHandlerImpl"/>
|
||||
<applicationService serviceInterface="org.jetbrains.java.generate.GenerateToStringContext"
|
||||
|
||||
Reference in New Issue
Block a user