generate getter/setter by user template

This commit is contained in:
Anna Kozlova
2015-01-22 19:14:33 +01:00
parent e81c0c2c32
commit 9c9daeef26
40 changed files with 522 additions and 135 deletions
@@ -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);
}
}
@@ -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);
}
@@ -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();
@@ -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) {
@@ -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();
@@ -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;
}
@@ -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
@@ -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);
@@ -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);
}
});
@@ -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)");
@@ -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);
}
@@ -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>();
@@ -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);
@@ -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));
@@ -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) {
@@ -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;
@@ -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);
}
@@ -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)) {
@@ -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);
}
}
}
@@ -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);
+4
View File
@@ -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"