代码之家  ›  专栏  ›  技术社区  ›  True Soft

用于代码生成的Eclipse插件

  •  0
  • True Soft  · 技术社区  · 14 年前

    abstract class AClass {
      boolean validate(){
        return true;
      }
    }
    

    当另一个类扩展时 AClass

    class BClass extends AClass {
      @Override
      boolean validate() {
        if (!super.validate()) {
            return false;
        }
        // TODO validate
        return true;
      }
    }
    

    当我从菜单创建一个新类(File>新建>班级)?
    我想用注解

    @Target(ElementType.METHOD)
    @interface Code {
        String content();
    }
    

    并将其添加到方法中:

    abstract class AClass {
        @Code(content = "\tif (!super.validate()) {\r\n" 
            + "\t\treturn false;\r\n" 
            + "\t}\r\n" 
            + "\t// TODO validate\r\n"
            + "\treturn true;")
        boolean validate() {
            return true;
        }
    }
    

    插件应该查找注释并在新创建的类中生成代码。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Gilbert Le Blanc    14 年前

    在Windows下->首选项,您可以键入Java代码模板。

    下面是新Java文件的模式,让您了解一个模式是什么样子的。

    ${filecomment}
    ${package_declaration}
    
    ${typecomment}
    ${type_declaration}
    
        2
  •  0
  •   True Soft    13 年前

    我的请求的解决方案如下:

    “新建类向导” ,通过扩展 org.eclipse.jdt.internal.ui.wizards.NewElementWizard (类似于 NewClassCreationWizard 类)的页面 org.eclipse.jdt.ui.wizards.NewTypeWizardPage (就像 NewClassWizardPage )

    覆盖 org.eclipse.jdt.ui.wizards.NewTypeWizardPage.createTypeMembers(IType, ImportsManager, IProgressMonitor)

    createInheritedMethods (如在 新建类向导页 )

    那么, type.getMethods()

    @Code ). 如果是,则创建新的方法代码,包括其声明:

    StringBuffer buf = new StringBuffer();
    buf.append("@Override").append("\n");
    buf.append(Modifier.toString(Modifier.PUBLIC) + " ");
    buf.append(Signature.toString(method.getSignature(), method.getElementName(), method.getParameterNames(), false, true));
    buf.append(" {").append("\n");
    buf.append("// the code from the annotation\n");
    buf.append("}");
    

    删除当前方法:

    method.delete(true, monitor);
    

    然后添加带有自定义代码的方法:

    type.createMethod(buf.toString(), null, true, monitor);