让Myeclipse自动生成的get set方法 自动加上文本注释,并且注释内容包含字段中我们加的文档注释

 

在进行编码写实体类的时候发现,一个实体类有好多的字段要进行注释,他们都是私有的不能直接访问,我们在写的时候加入的文档注释也起不到效果,但是自动生成的get,set方法的文档注释有不符合我们要求(没有包含字段中的文档注释) 所以就很纠结。在网上看到了一些大神有解决方法就试了下可以,拿出来和大家分享下!

修改后的效果图:

 

 

步骤:

1:在myeclipse/eclisp中搜索找到org.eclipse.jdt.ui_*.jar(*是版本号)

2:将jar文件改成.rar格式并打开(修改前最好先备份一下这个jar文件)

3:找到\org\eclipse\jdt\internal\corext\codemanipulation这个目录下的GetterSetterUtil.class这个文件, 并下载我提供压缩文件下的文件替换掉这一个文件就可以了

4:开启开发工具找到Window->Preferences->Java->CodeStyle->Code Templates->Comments->Getters/Setters

  getters:

/**  
 * 获取${bare_field_name}  
 * @return ${bare_field_name} ${bare_field_name}  
 */

setters:

/**  
 * 设置${bare_field_name}  
 * @param ${bare_field_name} ${bare_field_name}  
 */

注意:生成Get/Set方法时勾选上Generate method comments 

 

上面的链接如果没有积分的话,可以新建一个.txt,把下面这些代码丢进去,直接改文件名为.class(代码为编译后的代码)

  1 package org.eclipse.jdt.internal.corext.codemanipulation;
  2 
  3 import org.eclipse.core.runtime.CoreException;
  4 import org.eclipse.jdt.core.Flags;
  5 import org.eclipse.jdt.core.IField;
  6 import org.eclipse.jdt.core.IJavaProject;
  7 import org.eclipse.jdt.core.IMethod;
  8 import org.eclipse.jdt.core.ISourceRange;
  9 import org.eclipse.jdt.core.IType;
 10 import org.eclipse.jdt.core.JavaModelException;
 11 import org.eclipse.jdt.core.NamingConventions;
 12 import org.eclipse.jdt.core.Signature;
 13 import org.eclipse.jdt.core.dom.AST;
 14 import org.eclipse.jdt.core.dom.ASTNode;
 15 import org.eclipse.jdt.core.dom.Assignment;
 16 import org.eclipse.jdt.core.dom.Assignment.Operator;
 17 import org.eclipse.jdt.core.dom.CastExpression;
 18 import org.eclipse.jdt.core.dom.Expression;
 19 import org.eclipse.jdt.core.dom.ITypeBinding;
 20 import org.eclipse.jdt.core.dom.IVariableBinding;
 21 import org.eclipse.jdt.core.dom.InfixExpression;
 22 import org.eclipse.jdt.core.dom.InfixExpression.Operator;
 23 import org.eclipse.jdt.core.dom.NumberLiteral;
 24 import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 25 import org.eclipse.jdt.core.dom.PostfixExpression;
 26 import org.eclipse.jdt.core.dom.PostfixExpression.Operator;
 27 import org.eclipse.jdt.core.dom.PrefixExpression;
 28 import org.eclipse.jdt.core.dom.PrefixExpression.Operator;
 29 import org.eclipse.jdt.core.dom.PrimitiveType;
 30 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
 31 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
 32 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 33 import org.eclipse.jdt.internal.corext.util.JdtFlags;
 34 import org.eclipse.jdt.ui.CodeGeneration;
 35 
 36 public class GetterSetterUtil
 37 {
 38   private static final String[] EMPTY = new String[0];
 39 
 40   public static String getGetterName(IField field, String[] excludedNames)
 41     throws JavaModelException
 42   {
 43     boolean useIs = StubUtility.useIsForBooleanGetters(field
 44       .getJavaProject());
 45     return getGetterName(field, excludedNames, useIs);
 46   }
 47 
 48   private static String getGetterName(IField field, String[] excludedNames, boolean useIsForBoolGetters) throws JavaModelException
 49   {
 50     if (excludedNames == null)
 51       excludedNames = EMPTY;
 52     return getGetterName(field.getJavaProject(), field.getElementName(), 
 53       field.getFlags(), (useIsForBoolGetters) && 
 54       (JavaModelUtil.isBoolean(field)), excludedNames);
 55   }
 56 
 57   public static String getGetterName(IVariableBinding variableType, IJavaProject project, String[] excludedNames, boolean isBoolean)
 58   {
 59     boolean useIs = (StubUtility.useIsForBooleanGetters(project)) && 
 60       (isBoolean);
 61     return getGetterName(project, variableType.getName(), 
 62       variableType.getModifiers(), useIs, excludedNames);
 63   }
 64 
 65   public static String getGetterName(IJavaProject project, String fieldName, int flags, boolean isBoolean, String[] excludedNames)
 66   {
 67     return NamingConventions.suggestGetterName(project, fieldName, flags, 
 68       isBoolean, excludedNames);
 69   }
 70 
 71   public static String getSetterName(IVariableBinding variableType, IJavaProject project, String[] excludedNames, boolean isBoolean)
 72   {
 73     return getSetterName(project, variableType.getName(), 
 74       variableType.getModifiers(), isBoolean, excludedNames);
 75   }
 76 
 77   public static String getSetterName(IJavaProject project, String fieldName, int flags, boolean isBoolean, String[] excludedNames)
 78   {
 79     return NamingConventions.suggestSetterName(project, fieldName, flags, 
 80       isBoolean, excludedNames);
 81   }
 82 
 83   public static String getSetterName(IField field, String[] excludedNames) throws JavaModelException
 84   {
 85     if (excludedNames == null)
 86       excludedNames = EMPTY;
 87     return NamingConventions.suggestSetterName(field.getJavaProject(), 
 88       field.getElementName(), field.getFlags(), 
 89       JavaModelUtil.isBoolean(field), excludedNames);
 90   }
 91 
 92   public static IMethod getGetter(IField field) throws JavaModelException {
 93     String getterName = getGetterName(field, EMPTY, true);
 94     IMethod primaryCandidate = JavaModelUtil.findMethod(getterName, 
 95       new String[0], false, field.getDeclaringType());
 96     if ((!JavaModelUtil.isBoolean(field)) || ((primaryCandidate != null) && 
 97       (primaryCandidate.exists()))) {
 98       return primaryCandidate;
 99     }
100     String secondCandidateName = getGetterName(field, EMPTY, false);
101     return JavaModelUtil.findMethod(secondCandidateName, new String[0], 
102       false, field.getDeclaringType());
103   }
104 
105   public static IMethod getSetter(IField field) throws JavaModelException
106   {
107     String[] args = { field.getTypeSignature() };
108     return JavaModelUtil.findMethod(getSetterName(field, EMPTY), args, 
109       false, field.getDeclaringType());
110   }
111 
112   public static String getSetterStub(IField field, String setterName, boolean addComments, int flags)
113     throws CoreException
114   {
115     String fieldName = field.getElementName();
116     IType parentType = field.getDeclaringType();
117     String returnSig = field.getTypeSignature();
118     String typeName = Signature.toString(returnSig);
119     IJavaProject project = field.getJavaProject();
120     String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(project, fieldName, field.getFlags());
121     String argname = StubUtility.suggestArgumentName(project, accessorName, EMPTY);
122     boolean isStatic = Flags.isStatic(flags);
123     boolean isSync = Flags.isSynchronized(flags);
124     boolean isFinal = Flags.isFinal(flags);
125     String lineDelim = "\n";
126     StringBuffer buf = new StringBuffer();
127     if (addComments) {
128       String comment = CodeGeneration.getSetterComment(
129         field.getCompilationUnit(), 
130         parentType.getTypeQualifiedName('.'), 
131         setterName, 
132         field.getElementName(), 
133         typeName, 
134         argname, 
135         accessorName, 
136         lineDelim);
137       ISourceRange sr = field.getJavadocRange();
138       if (sr != null) {
139         String filedComment = field.getSource();
140         filedComment = filedComment.substring(0, sr.getLength());
141         filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");
142 
143         comment = comment.replaceFirst(field.getElementName(), filedComment);
144 
145         int i = comment.lastIndexOf(field.getElementName());
146         int j = getCount(comment, field.getElementName());
147         if ((i != -1) && (j >= 2)) {
148           comment = comment.substring(0, i) + filedComment + comment.substring(i + field.getElementName().length());
149         }
150       }
151 
152       if (comment != null) {
153         buf.append(comment);
154         buf.append(lineDelim);
155       }
156     }
157     buf.append(JdtFlags.getVisibilityString(flags));
158     buf.append(' ');
159     if (isStatic)
160       buf.append("static ");
161     if (isSync)
162       buf.append("synchronized ");
163     if (isFinal)
164       buf.append("final ");
165     buf.append("void ");
166     buf.append(setterName);
167     buf.append('(');
168     buf.append(typeName);
169     buf.append(' ');
170     buf.append(argname);
171     buf.append(") {");
172     buf.append(lineDelim);
173     boolean useThis = StubUtility.useThisForFieldAccess(project);
174     if ((argname.equals(fieldName)) || ((useThis) && (!isStatic)))
175       if (isStatic)
176         fieldName = parentType.getElementName() + '.' + fieldName;
177       else
178         fieldName = "this." + fieldName;
179     String body = CodeGeneration.getSetterMethodBodyContent(field
180       .getCompilationUnit(), parentType.getTypeQualifiedName('.'), 
181       setterName, fieldName, argname, lineDelim);
182     if (body != null)
183       buf.append(body);
184     buf.append("}");
185     buf.append(lineDelim);
186     return buf.toString();
187   }
188 
189   public static String getGetterStub(IField field, String getterName, boolean addComments, int flags)
190     throws CoreException
191   {
192     String fieldName = field.getElementName();
193     IType parentType = field.getDeclaringType();
194     boolean isStatic = Flags.isStatic(flags);
195     boolean isSync = Flags.isSynchronized(flags);
196     boolean isFinal = Flags.isFinal(flags);
197     String typeName = Signature.toString(field.getTypeSignature());
198     String accessorName = NamingConventions.removePrefixAndSuffixForFieldName(field.getJavaProject(), fieldName, field.getFlags());
199     String lineDelim = "\n";
200     StringBuffer buf = new StringBuffer();
201     if (addComments)
202     {
203       String comment = CodeGeneration.getGetterComment(
204         field.getCompilationUnit(), 
205         parentType.getTypeQualifiedName('.'), 
206         getterName, 
207         field.getElementName(), 
208         typeName, 
209         accessorName, 
210         lineDelim);
211       ISourceRange sr = field.getJavadocRange();
212       if (sr != null) {
213         String filedComment = field.getSource();
214         filedComment = filedComment.substring(0, sr.getLength());
215         filedComment = filedComment.replaceAll("[\n,\r,*,/, ,\t]", "");
216 
217         comment = comment.replaceFirst(field.getElementName(), filedComment);
218 
219         int i = comment.lastIndexOf(field.getElementName());
220         int j = getCount(comment, field.getElementName());
221         if ((i != -1) && (j >= 2)) {
222           comment = comment.substring(0, i) + filedComment + comment.substring(i + field.getElementName().length());
223         }
224       }
225 
226       if (comment != null) {
227         buf.append(comment);
228         buf.append(lineDelim);
229       }
230     }
231     buf.append(JdtFlags.getVisibilityString(flags));
232     buf.append(' ');
233     if (isStatic)
234       buf.append("static ");
235     if (isSync)
236       buf.append("synchronized ");
237     if (isFinal)
238       buf.append("final ");
239     buf.append(typeName);
240     buf.append(' ');
241     buf.append(getterName);
242     buf.append("() {");
243     buf.append(lineDelim);
244     boolean useThis = StubUtility.useThisForFieldAccess(field.getJavaProject());
245     if ((useThis) && (!isStatic))
246       fieldName = "this." + fieldName;
247     String body = CodeGeneration.getGetterMethodBodyContent(field.getCompilationUnit(), parentType.getTypeQualifiedName('.'), getterName, fieldName, lineDelim);
248     if (body != null)
249       buf.append(body);
250     buf.append("}");
251     buf.append(lineDelim);
252     return buf.toString();
253   }
254 
255   private static int getCount(String str, String sign)
256   {
257     if (str == null)
258       return 0;
259     double i = str.length();
260     str = str.replaceAll(sign, "");
261     return (int)(i - str.length()) / sign.length();
262   }
263 
264   public static Expression getAssignedValue(ASTNode node, ASTRewrite astRewrite, Expression getterExpression, ITypeBinding variableType, boolean is50OrHigher)
265   {
266     InfixExpression.Operator op = null;
267     AST ast = astRewrite.getAST();
268     if (isNotInBlock(node))
269       return null;
270     if (node.getNodeType() == 7) {
271       Assignment assignment = (Assignment)node;
272       Expression rightHandSide = assignment.getRightHandSide();
273       Expression copiedRightOp = (Expression)astRewrite
274         .createCopyTarget(rightHandSide);
275       if (assignment.getOperator() == Assignment.Operator.ASSIGN) {
276         ITypeBinding rightHandSideType = rightHandSide
277           .resolveTypeBinding();
278         copiedRightOp = createNarrowCastIfNessecary(copiedRightOp, 
279           rightHandSideType, ast, variableType, is50OrHigher);
280         return copiedRightOp;
281       }
282       if (getterExpression != null) {
283         InfixExpression infix = ast.newInfixExpression();
284         infix.setLeftOperand(getterExpression);
285         infix.setOperator(ASTNodes.convertToInfixOperator(
286           assignment.getOperator()));
287         infix.setRightOperand(copiedRightOp);
288         ITypeBinding infixType = infix.resolveTypeBinding();
289         return createNarrowCastIfNessecary(infix, infixType, ast, 
290           variableType, is50OrHigher);
291       }
292     } else if (node.getNodeType() == 37) {
293       PostfixExpression po = (PostfixExpression)node;
294       if (po.getOperator() == PostfixExpression.Operator.INCREMENT)
295         op = InfixExpression.Operator.PLUS;
296       if (po.getOperator() == PostfixExpression.Operator.DECREMENT)
297         op = InfixExpression.Operator.MINUS;
298     } else if (node.getNodeType() == 38) {
299       PrefixExpression pe = (PrefixExpression)node;
300       if (pe.getOperator() == PrefixExpression.Operator.INCREMENT)
301         op = InfixExpression.Operator.PLUS;
302       if (pe.getOperator() == PrefixExpression.Operator.DECREMENT)
303         op = InfixExpression.Operator.MINUS;
304     }
305     if ((op != null) && (getterExpression != null)) {
306       return createInfixInvocationFromPostPrefixExpression(op, 
307         getterExpression, ast, variableType, is50OrHigher);
308     }
309     return null;
310   }
311 
312   private static boolean isNotInBlock(ASTNode parent) {
313     ASTNode statement = parent.getParent();
314     boolean isStatement = statement.getNodeType() != 21;
315     ASTNode block = statement.getParent();
316     boolean isBlock = (block.getNodeType() == 8) || (block.getNodeType() == 50);
317     boolean isControlStatemenBody = 
318       ASTNodes.isControlStatementBody(statement.getLocationInParent());
319     return (isStatement) || ((!isBlock) && (!isControlStatemenBody));
320   }
321 
322   private static Expression createInfixInvocationFromPostPrefixExpression(InfixExpression.Operator operator, Expression getterExpression, AST ast, ITypeBinding variableType, boolean is50OrHigher)
323   {
324     InfixExpression infix = ast.newInfixExpression();
325     infix.setLeftOperand(getterExpression);
326     infix.setOperator(operator);
327     NumberLiteral number = ast.newNumberLiteral();
328     number.setToken("1");
329     infix.setRightOperand(number);
330     ITypeBinding infixType = infix.resolveTypeBinding();
331     return createNarrowCastIfNessecary(infix, infixType, ast, variableType, 
332       is50OrHigher);
333   }
334 
335   private static Expression createNarrowCastIfNessecary(Expression expression, ITypeBinding expressionType, AST ast, ITypeBinding variableType, boolean is50OrHigher)
336   {
337     PrimitiveType castTo = null;
338     if (variableType.isEqualTo(expressionType))
339       return expression;
340     if (is50OrHigher) {
341       if (ast.resolveWellKnownType("java.lang.Character").isEqualTo(
342         variableType))
343         castTo = ast.newPrimitiveType(PrimitiveType.CHAR);
344       if (ast.resolveWellKnownType("java.lang.Byte").isEqualTo(
345         variableType))
346         castTo = ast.newPrimitiveType(PrimitiveType.BYTE);
347       if (ast.resolveWellKnownType("java.lang.Short").isEqualTo(
348         variableType))
349         castTo = ast.newPrimitiveType(PrimitiveType.SHORT);
350     }
351     if (ast.resolveWellKnownType("char").isEqualTo(variableType))
352       castTo = ast.newPrimitiveType(PrimitiveType.CHAR);
353     if (ast.resolveWellKnownType("byte").isEqualTo(variableType))
354       castTo = ast.newPrimitiveType(PrimitiveType.BYTE);
355     if (ast.resolveWellKnownType("short").isEqualTo(variableType))
356       castTo = ast.newPrimitiveType(PrimitiveType.SHORT);
357     if (castTo != null) {
358       CastExpression cast = ast.newCastExpression();
359       if (ASTNodes.needsParentheses(expression)) {
360         ParenthesizedExpression parenthesized = ast
361           .newParenthesizedExpression();
362         parenthesized.setExpression(expression);
363         cast.setExpression(parenthesized);
364       } else {
365         cast.setExpression(expression);
366       }
367       cast.setType(castTo);
368       return cast;
369     }
370     return expression;
371   }
372 }

 

posted @ 2017-06-16 13:48  人可丶何  阅读(1618)  评论(0编辑  收藏  举报