智能搜索和生成Java代码,最好使用Python?

智能搜索和生成Java代码,最好使用Python?,java,python,parsing,code-generation,Java,Python,Parsing,Code Generation,基本上,我用Java做了大量一次性代码生成、大规模重构等工作 我选择的工具语言是Python,但我将采用您能提供的任何解决方案 这里是我想要的一个伪代码的简化说明 为接口生成实现 search within my project: for each Interface as iName: write class(name=iName+"Impl", implements=iName) search within the body of iName: for ea

基本上,我用Java做了大量一次性代码生成、大规模重构等工作

我选择的工具语言是Python,但我将采用您能提供的任何解决方案


这里是我想要的一个伪代码的简化说明

为接口生成实现

search within my project:
  for each Interface as iName:
    write class(name=iName+"Impl", implements=iName)
    search within the body of iName:
      for each Method as mName:
        write method(name=mName, body="// TODO implement this...")
基本上,我正在搜索的工具允许我:

  • 根据Java结构解析文件(“搜索接口”)
  • 搜索按语言元素和类型上下文化的单词(“SomeClass类型的变量”、“doStuff()方法调用SomeClass实例”)
  • 使用结构上下文(“在当前结果的主体内”)运行搜索
  • 轻松替换或生成代码(如上所述,使用要生成的帮助程序或替换的函数,“将接口重命名为Foo”、“插入Blah.Blah()行”等)
关键是,我不想花太多时间写这些东西,因为它们通常是一次性的。但有时我需要比grep提供的更聪明的东西。写一个简单化的版本并不难,但是如果我要使用这样的东西,我希望它是健壮的

有没有关于工具/库的建议可以帮助我实现这一点


编辑以添加一些说明

  • Python绝对不是必需的;那是什么我就要什么。我只是在有选择的情况下建议
  • 这将与IDE重构结合使用;有时候它不能满足我的所有要求
  • 在我用于代码生成的实例中(如上所述),它用于增强其他代码生成器的输出。e、 我们使用的库输出大量接口,我们需要对每个接口进行标准实现,以将其与我们的代码库相匹配

  • 如果您使用Java编写代码,我强烈建议您使用。它内置了这种重构支持。也支持这种东西(尽管我更喜欢NetBeans)。这两个项目都是开源的,所以如果你想看看它们是如何执行重构的,你可以看看它们的源代码。

    Java最近受到了相当多的批评,但在工具领域——这是不合理的

    我们被宠坏了,没有选择;Eclipse、Netbeans和Intellij是三大IDE。所有这些都提供了出色的搜索和重构级别。我认为Eclipse在Netbeans上具有优势,Intellij通常领先于Eclipse

    您还可以使用静态分析工具(如FindBugs、CheckTyle等)来查找问题,即过长的方法和类、过于复杂的代码


    如果你真的想利用你的Python技能,看看Jython。它是一个用Java编写的Python解释器

    首先,我不知道有任何用Python实现的工具或库是专门为重构Java代码而设计的,谷歌搜索也没有给我任何线索

    其次,我认为编写这样一个体面的工具或库来用Python重构Java将是一项艰巨的任务。您必须用Python实现Java编译器前端(lexer/parser、AST builder和类型分析器),然后找出如何将其与程序编辑器集成。没有人做这件事我并不感到惊讶。。。鉴于已经存在成熟的替代方案

    第三,在没有对源代码进行全面分析的情况下进行重构(例如,使用模式匹配),将无法进行复杂的重构,并且将很可能在实现者没有想到的边缘情况下犯错误。我希望这就是OP目前的运作水平

    鉴于前景黯淡,有哪些替代方案:

    一种替代方法是使用一个现有的JavaIDE(例如NetBeans、Eclipse、IDEA等)作为重构工具。OP将无法在Python代码中扩展这样一个工具的功能,但很可能他真的不需要这样做。我希望这些IDE中至少有一个能够满足他95%的需求,而且(如果他是现实的话)这应该足够好了。特别是当你认为IDE有很多附带的特性时,帮助重构变得更容易;e、 g.结构化编辑、撤消/重做、增量编译、智能代码完成、智能搜索、类型和调用层次视图等

    (旁白……如果现有IDE不够好(@wizardofods-只有OP可以调用!!),那么尝试扩展现有IDE的重构功能比用不同的实现语言重新开始更有意义。)


    根据他的实际工作,模型驱动的代码生成可能是另一种选择。例如,如果重构是因为他经常创建和重新创建他的对象模型而发生的,那么另一种方法是用某种建模语言编写模型并从这些模型生成代码。在做这种事情时,我选择的工具是EclipseMF和相关技术。EMF技术包括编辑器生成、XML序列化、持久性、查询、模型到模型转换等。我使用EMF来实现和推出具有对象模型的项目,对象模型由50到100个具有复杂关系和验证需求的不同类组成。当您从更新的模型重新生成时,EMF支持合并源代码编辑是一个关键特性。

    @Michael Aaron Safyan:您说他们有“这种内置的重构支持”。。。但是,你真的是说,像OP所问的那样,你可以在每一个尚未以Impl结尾的具体类中添加“Impl”吗?Eclipse和NetBeans真的内置了这种功能吗?因为我不认为OP是在手动完成几十个类之后完成的。我认为他更像是一个数百KLOC的代码库,并希望这是在一个很短的时间内完成