我需要这样的get/set方法
/**
* 获取起始页
*
* @return the startIndex
*/
public int getStartIndex() {
return startIndex;
}
/**
* 设置起始页
*
* @param startIndex the 起始页 to set
*/
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
而eclipse自动生成的只能是这种
/**
* 获取pageSize
*
* @return the pageSize
*/
public int getPageSize() {
return pageSize;
}
/**
* 设置pageSize
*
* @param pageSize the pageSize to set
*/
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
今天研究了下发现可以通过修改eclipse源代码解决该问题。
在eclipse\plugins中找到org.eclipse.jdt.ui_*.jar这个jar包,依次打开org.eclipse.jdt\internal\corext\codemanipulation\GetterSetterUtil.class,反编译出来。
修改getSetterStub和getGetterStub这两个方法,在
if (addComments) {
String comment = CodeGeneration.getSetterComment(field.getCompilationUnit(), parentType.getTypeQualifiedName('.'), setterName, field.getElementName(), typeName, argname, accessorName, lineDelim);
下面,增加
ISourceRange sr = field.getJavadocRange();
if (null != sr) {
String filedComment = field.getSource();
filedComment = filedComment.substring(0, sr.getLength());
filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");
comment = comment.replaceFirst(field.getElementName(), filedComment);
int i = comment.lastIndexOf(field.getElementName());
int j = getCount(comment, field.getElementName());
if (i != -1 && j >= 2) {
comment = comment.substring(0, i) + filedComment + comment.substring(i + field.getElementName().length());
}
}
修改后的文件为
package org.eclipse.jdt.internal.corext.codemanipulation;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.*;
import org.eclipse.jdt.core.dom.*;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
import org.eclipse.jdt.internal.corext.dom.ASTNodes;
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.internal.corext.util.JdtFlags;
import org.eclipse.jdt.ui.CodeGeneration;
public class GetterSetterUtil {
private static final String EMPTY[] = new String[0];
private GetterSetterUtil() {
}
public static String getGetterName(IField field, String excludedNames[])
throws JavaModelException {
boolean useIs = StubUtility.useIsForBooleanGetters(field
.getJavaProject());
return getGetterName(field, excludedNames, useIs);
}
private static String getGetterName(IField field, String excludedNames[],
boolean useIsForBoolGetters) throws JavaModelException {
if (excludedNames == null)
excludedNames = EMPTY;
return getGetterName(field.getJavaProject(), field.getElementName(),
field.getFlags(), useIsForBoolGetters
&& JavaModelUtil.isBoolean(field), excludedNames);
}
public static String getGetterName(IVariableBinding variableType,
IJavaProject project, String excludedNames[], boolean isBoolean) {
boolean useIs = StubUtility.useIsForBooleanGetters(project)
&& isBoolean;
return getGetterName(project, variableType.getName(), variableType
.getModifiers(), useIs, excludedNames);
}
public static String getGetterName(IJavaProject project, String fieldName,
int flags, boolean isBoolean, String excludedNames[]) {
return NamingConventions.suggestGetterName(project, fieldName, flags,
isBoolean, excludedNames);
}
public static String getSetterName(IVariableBinding variableType,
IJavaProject project, String excludedNames[], boolean isBoolean) {
return getSetterName(project, variableType.getName(), variableType
.getModifiers(), isBoolean, excludedNames);
}
public static String getSetterName(IJavaProject project, String fieldName,
int flags, boolean isBoolean, String excludedNames[]) {
return NamingConventions.suggestSetterName(project, fieldName, flags,
isBoolean, excludedNames);
}
public static String getSetterName(IField field, String excludedNames[])
throws JavaModelException {
if (excludedNames == null)
excludedNames = EMPTY;
return NamingConventions.suggestSetterName(field.getJavaProject(),
field.getElementName(), field.getFlags(), JavaModelUtil
.isBoolean(field), excludedNames);
}
public static IMethod getGetter(IField field) throws JavaModelException {
String getterName = getGetterName(field, EMPTY, true);
IMethod primaryCandidate = JavaModelUtil.findMethod(getterName,
new String[0], false, field.getDeclaringType());
if (!JavaModelUtil.isBoolean(field) || primaryCandidate != null
&& primaryCandidate.exists()) {
return primaryCandidate;
} else {
String secondCandidateName = getGetterName(field, EMPTY, false);
return JavaModelUtil.findMethod(secondCandidateName, new String[0],
false, field.getDeclaringType());
}
}
public static IMethod getSetter(IField field) throws JavaModelException {
String args[] = { field.getTypeSignature() };
return JavaModelUtil.findMethod(getSetterName(field, EMPTY), args,
false, field.getDeclaringType());
}
public static String getSetterStub(IField field, String setterName,
boolean addComments, int flags) throws CoreException {
String fieldName = field.getElementName();
IType parentType = field.getDeclaringType();
String returnSig = field.getTypeSignature();
String typeName = Signature.toString(returnSig);
IJavaProject project = field.getJavaProject();
String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(project, fieldName, field.getFlags());
String argname = StubUtility.suggestArgumentName(project, accessorName,EMPTY);
boolean isStatic = Flags.isStatic(flags);
boolean isSync = Flags.isSynchronized(flags);
boolean isFinal = Flags.isFinal(flags);
String lineDelim = "\n";
StringBuffer buf = new StringBuffer();
if (addComments) {
String comment = CodeGeneration.getSetterComment(
field.getCompilationUnit(),
parentType.getTypeQualifiedName('.'),
setterName,
field.getElementName(),
typeName,
argname,
accessorName,
lineDelim);
ISourceRange sr = field.getJavadocRange();
if (null != sr) {
String filedComment = field.getSource();
filedComment = filedComment.substring(0, sr.getLength());
filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");
comment = comment.replaceFirst(field.getElementName(), filedComment);
int i = comment.lastIndexOf(field.getElementName());
int j = getCount(comment, field.getElementName());
if (i != -1 && j >= 2) {
comment = comment.substring(0, i) + filedComment + comment.substring(i + field.getElementName().length());
}
}
if (comment != null) {
buf.append(comment);
buf.append(lineDelim);
}
}
buf.append(JdtFlags.getVisibilityString(flags));
buf.append(' ');
if (isStatic)
buf.append("static ");
if (isSync)
buf.append("synchronized ");
if (isFinal)
buf.append("final ");
buf.append("void ");
buf.append(setterName);
buf.append('(');
buf.append(typeName);
buf.append(' ');
buf.append(argname);
buf.append(") {");
buf.append(lineDelim);
boolean useThis = StubUtility.useThisForFieldAccess(project);
if (argname.equals(fieldName) || useThis && !isStatic)
if (isStatic)
fieldName = parentType.getElementName() + '.' + fieldName;
else
fieldName = "this." + fieldName;
String body = CodeGeneration.getSetterMethodBodyContent(field
.getCompilationUnit(), parentType.getTypeQualifiedName('.'),
setterName, fieldName, argname, lineDelim);
if (body != null)
buf.append(body);
buf.append("}");
buf.append(lineDelim);
return buf.toString();
}
public static String getGetterStub(IField field, String getterName,
boolean addComments, int flags) throws CoreException {
String fieldName = field.getElementName();
IType parentType = field.getDeclaringType();
boolean isStatic = Flags.isStatic(flags);
boolean isSync = Flags.isSynchronized(flags);
boolean isFinal = Flags.isFinal(flags);
String typeName = Signature.toString(field.getTypeSignature());
String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(field.getJavaProject(), fieldName, field.getFlags());
String lineDelim = "\n";
StringBuffer buf = new StringBuffer();
if (addComments) {
String comment= CodeGeneration.getGetterComment(
field.getCompilationUnit(),
parentType.getTypeQualifiedName('.'),
getterName,
field.getElementName(),
typeName,
accessorName,
lineDelim);
ISourceRange sr = field.getJavadocRange();
if( null != sr ) {
String filedComment = field.getSource();
filedComment = filedComment.substring(0, sr.getLength());
filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");
comment = comment.replaceFirst(field.getElementName(), filedComment);
int i = comment.lastIndexOf(field.getElementName());
int j = getCount(comment, field.getElementName());
if (i != -1 && j >= 2) {
comment = comment.substring(0, i) + filedComment + comment.substring(i + field.getElementName().length());
}
}
if (comment != null) {
buf.append(comment);
buf.append(lineDelim);
}
}
buf.append(JdtFlags.getVisibilityString(flags));
buf.append(' ');
if (isStatic)
buf.append("static ");
if (isSync)
buf.append("synchronized ");
if (isFinal)
buf.append("final ");
buf.append(typeName);
buf.append(' ');
buf.append(getterName);
buf.append("() {");
buf.append(lineDelim);
boolean useThis = StubUtility.useThisForFieldAccess(field.getJavaProject());
if (useThis && !isStatic)
fieldName = "this." + fieldName;
String body = CodeGeneration.getGetterMethodBodyContent(field.getCompilationUnit(), parentType.getTypeQualifiedName('.'), getterName, fieldName, lineDelim);
if (body != null)
buf.append(body);
buf.append("}");
buf.append(lineDelim);
return buf.toString();
}
private static int getCount(String str, String sign) {
if (str == null)
return 0;
double i = str.length();
str = str.replaceAll(sign, "");
return (int) (i - str.length()) / sign.length();
}
public static Expression getAssignedValue(ASTNode node,
ASTRewrite astRewrite, Expression getterExpression,
ITypeBinding variableType, boolean is50OrHigher) {
org.eclipse.jdt.core.dom.InfixExpression.Operator op = null;
AST ast = astRewrite.getAST();
if (isNotInBlock(node))
return null;
if (node.getNodeType() == 7) {
Assignment assignment = (Assignment) node;
Expression rightHandSide = assignment.getRightHandSide();
Expression copiedRightOp = (Expression) astRewrite
.createCopyTarget(rightHandSide);
if (assignment.getOperator() == org.eclipse.jdt.core.dom.Assignment.Operator.ASSIGN) {
ITypeBinding rightHandSideType = rightHandSide
.resolveTypeBinding();
copiedRightOp = createNarrowCastIfNessecary(copiedRightOp,
rightHandSideType, ast, variableType, is50OrHigher);
return copiedRightOp;
}
if (getterExpression != null) {
InfixExpression infix = ast.newInfixExpression();
infix.setLeftOperand(getterExpression);
infix.setOperator(ASTNodes.convertToInfixOperator(assignment
.getOperator()));
infix.setRightOperand(copiedRightOp);
ITypeBinding infixType = infix.resolveTypeBinding();
return createNarrowCastIfNessecary(infix, infixType, ast,
variableType, is50OrHigher);
}
} else if (node.getNodeType() == 37) {
PostfixExpression po = (PostfixExpression) node;
if (po.getOperator() == org.eclipse.jdt.core.dom.PostfixExpression.Operator.INCREMENT)
op = org.eclipse.jdt.core.dom.InfixExpression.Operator.PLUS;
if (po.getOperator() == org.eclipse.jdt.core.dom.PostfixExpression.Operator.DECREMENT)
op = org.eclipse.jdt.core.dom.InfixExpression.Operator.MINUS;
} else if (node.getNodeType() == 38) {
PrefixExpression pe = (PrefixExpression) node;
if (pe.getOperator() == org.eclipse.jdt.core.dom.PrefixExpression.Operator.INCREMENT)
op = org.eclipse.jdt.core.dom.InfixExpression.Operator.PLUS;
if (pe.getOperator() == org.eclipse.jdt.core.dom.PrefixExpression.Operator.DECREMENT)
op = org.eclipse.jdt.core.dom.InfixExpression.Operator.MINUS;
}
if (op != null && getterExpression != null)
return createInfixInvocationFromPostPrefixExpression(op,
getterExpression, ast, variableType, is50OrHigher);
else
return null;
}
private static boolean isNotInBlock(ASTNode parent) {
ASTNode statement = parent.getParent();
boolean isStatement = statement.getNodeType() != 21;
ASTNode block = statement.getParent();
boolean isBlock = block.getNodeType() == 8 || block.getNodeType() == 50;
boolean isControlStatemenBody = ASTNodes
.isControlStatementBody(statement.getLocationInParent());
return isStatement || !isBlock && !isControlStatemenBody;
}
private static Expression createInfixInvocationFromPostPrefixExpression(
org.eclipse.jdt.core.dom.InfixExpression.Operator operator,
Expression getterExpression, AST ast, ITypeBinding variableType,
boolean is50OrHigher) {
InfixExpression infix = ast.newInfixExpression();
infix.setLeftOperand(getterExpression);
infix.setOperator(operator);
NumberLiteral number = ast.newNumberLiteral();
number.setToken("1");
infix.setRightOperand(number);
ITypeBinding infixType = infix.resolveTypeBinding();
return createNarrowCastIfNessecary(infix, infixType, ast, variableType,
is50OrHigher);
}
private static Expression createNarrowCastIfNessecary(
Expression expression, ITypeBinding expressionType, AST ast,
ITypeBinding variableType, boolean is50OrHigher) {
PrimitiveType castTo = null;
if (variableType.isEqualTo(expressionType))
return expression;
if (is50OrHigher) {
if (ast.resolveWellKnownType("java.lang.Character").isEqualTo(
variableType))
castTo = ast.newPrimitiveType(PrimitiveType.CHAR);
if (ast.resolveWellKnownType("java.lang.Byte").isEqualTo(
variableType))
castTo = ast.newPrimitiveType(PrimitiveType.BYTE);
if (ast.resolveWellKnownType("java.lang.Short").isEqualTo(
variableType))
castTo = ast.newPrimitiveType(PrimitiveType.SHORT);
}
if (ast.resolveWellKnownType("char").isEqualTo(variableType))
castTo = ast.newPrimitiveType(PrimitiveType.CHAR);
if (ast.resolveWellKnownType("byte").isEqualTo(variableType))
castTo = ast.newPrimitiveType(PrimitiveType.BYTE);
if (ast.resolveWellKnownType("short").isEqualTo(variableType))
castTo = ast.newPrimitiveType(PrimitiveType.SHORT);
if (castTo != null) {
CastExpression cast = ast.newCastExpression();
if (ASTNodes.needsParentheses(expression)) {
ParenthesizedExpression parenthesized = ast
.newParenthesizedExpression();
parenthesized.setExpression(expression);
cast.setExpression(parenthesized);
} else {
cast.setExpression(expression);
}
cast.setType(castTo);
return cast;
} else {
return expression;
}
}
}
编译后替换原文件,然后在eclipse中打开window->Preferences->Java->CodeStyle->CodeTemplates->Comments
修改Getters
/**
* 获取${bare_field_name}
*
* @return the ${bare_field_name}
*/
修改Setters
/**
* 设置${bare_field_name}
*
* @param ${param} the ${bare_field_name} to set
*/
在生成get/set方法的时候,勾选Generate method comments就行了。