[置顶] 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替换原有的代码。
(本来想上传文件供下载,不想浪费你们积分了 直接贴源代码)
然后在生成getter,setter方法时,选上生成注释就行了,前提是先给相应的属性加上注释,然后getter,setter方法中就会包含属性的注释。
![](https://img-blog.csdn.net/20180330093003912?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Rhbmdhbmxpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
、
自动生成如下:
打开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; } }
相关文章推荐
- eclipse自动生成的get set方法 自动加上文本注释,并且注释内容包含字段中我们加的文档注释 .
- eclipse ,as中 自动生成Get Set方法,去除前缀m,s
- eclipse快捷键 自动生成get set方法,转到所调用的方法
- Eclipse自动生成构造函数和get set 方法
- eclipse自动生成的get set方法 自动加上文本注释,并且注释内容包含字段中我们加的文档注释
- eclipse 自动生成get set方法的bug
- 笔记 java 自动生成get set方法的快捷
- 在Eclipse里利用javah把java代码声明的JNI方法自动生成成C\C++头文件
- 图解教程]Eclipse不可不知的用法之一:自动生成Getter、Setter和构造方法
- 如何自动在Eclipse里对指定类或接口生成要覆盖的方法?
- Eclipse用法和技巧三:自动生成Main方法2
- Eclipse自动生成构造方法
- eclipse 自动生成json格式的toString()方法
- eclipse 快速自动生成测试方法
- [图解教程]Eclipse不可不知的用法之一:自动生成Getter、Setter和构造方法
- Eclipse自动生成方法注释 快捷键
- eclipse自动生成注释的方法
- 关于eclipse创建android项目没有自动生成r文件的解决方法
- Eclipse用法和技巧七:自动生成get和set方法2 .
- 利用Eclipse或AndroidStudio的代码模板,自动生成 Log.e(TAG,"类名.方法名. msg"); 格式的代码