eclipse自动生成GET SET方法

Java核心编程
话不多说,直接进入正题:
打开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;
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thomas & Friends

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值