您的位置:首页 > 编程语言 > Java开发

[置顶] eclipse自动生成GET SET方法

2018-03-30 09:31 633 查看
话不多说,直接进入正题:

打开eclipse安装目录在plugins目录下找到org.eclipse.jdt.ui.*.jar,用解压软件打开,

进入org\eclipse\jdt\internal\corext\codemanipulation包下里的GetterSetterUtil.class,直接用文本文件打开,然后将以下所有代码copy替换原有的代码。

(本来想上传文件供下载,不想浪费你们积分了 直接贴源代码)

package org.eclipse.jdt.internal.corext.codemanipulation;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.NamingConventions;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.Assignment;
import org.eclipse.jdt.core.dom.Assignment.Operator;
import org.eclipse.jdt.core.dom.CastExpression;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
import org.eclipse.jdt.core.dom.InfixExpression;
import org.eclipse.jdt.core.dom.InfixExpression.Operator;
import org.eclipse.jdt.core.dom.NumberLiteral;
import org.eclipse.jdt.core.dom.ParenthesizedExpression;
import org.eclipse.jdt.core.dom.PostfixExpression;
import org.eclipse.jdt.core.dom.PostfixExpression.Operator;
import org.eclipse.jdt.core.dom.PrefixExpression;
import org.eclipse.jdt.core.dom.PrefixExpression.Operator;
import org.eclipse.jdt.core.dom.PrimitiveType;
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];

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))) ?
1 : false, 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;

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 (sr != null) {
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 (sr != null) {
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)
{
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() == Assignment.Operator.ASSIGN) {
ITypeBinding rightHandSideType = rightHandSide.resolveTypeBinding
();
copiedRightOp = createNarrowCastIfNessecary(copiedRightOp,
rightHandSideType, ast, variableType, is50OrHigher);
return copiedRightOp;
}
if (getterExpression == null) break label240;
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);
}
if (node.getNodeType() == 37) {
PostfixExpression po = (PostfixExpression)node;
if (po.getOperator() == PostfixExpression.Operator.INCREMENT)
op = InfixExpression.Operator.PLUS;
if (po.getOperator() == PostfixExpression.Operator.DECREMENT)
op = InfixExpression.Operator.MINUS;
} else if (node.getNodeType() == 38) {
PrefixExpression pe = (PrefixExpression)node;
if (pe.getOperator() == PrefixExpression.Operator.INCREMENT)
op = InfixExpression.Operator.PLUS;
if (pe.getOperator() == PrefixExpression.Operator.DECREMENT)
op = InfixExpression.Operator.MINUS;
}
if ((op != null) && (getterExpression != null))
label240: return createInfixInvocationFromPostPrefixExpression(op,
getterExpression, ast, variableType, is50OrHigher);

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(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;
}
return expression;
}
}


然后在生成getter,setter方法时,选上生成注释就行了,前提是先给相应的属性加上注释,然后getter,setter方法中就会包含属性的注释。




自动生成如下:

package com.qhyu.bugs;

public class QhyuPO {
/** 工号 */
private int num;
/** 姓名 */
private String name;
/** 性别 */
private String sex;
/** 年龄 */
private int age;
/**
* 获取工号
* @return num 工号
*/
public int getNum() {
return num;
}

/**
* 设置工号
* @num the 工号 to set
*/
public void setNum(int num) {
this.num = num;
}

/**
* 获取姓名
* @return name 姓名
*/
public String getName() {
return name;
}

/**
* 设置姓名
* @name the 姓名 to set
*/
public void setName(String name) {
this.name = name;
}

/**
* 获取性别
* @return sex 性别
*/
public String getSex() {
return sex;
}

/**
* 设置性别
* @sex the 性别 to set
*/
public void setSex(String sex) {
this.sex = sex;
}

/**
* 获取年龄
* @return age 年龄
*/
public int getAge() {
return age;
}

/**
* 设置年龄
* @age the 年龄 to set
*/
public void setAge(int age) {
this.age = age;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: