代码之家  ›  专栏  ›  技术社区  ›  Ipsquiggle

智能搜索和Java代码生成,优先使用Python?

  •  3
  • Ipsquiggle  · 技术社区  · 14 年前

    基本上,我在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类型的变量”、“someClass实例上的dostuff()方法调用”)
    • 使用结构上下文(“在当前结果的正文内”)运行搜索
    • 轻松替换或生成代码(使用帮助程序生成,如上所述,或用于替换的函数,“将接口重命名为foo”,“插入行blah.blah()”,等等)

    关键是,我不想花太多时间写这些东西,因为它们通常是一次性的。但有时我需要比grep提供的更聪明的东西。写一个简单的版本并不难,但是如果我要使用这样的东西,我希望它是健壮的。

    有什么工具/库的建议可以帮助我完成这个任务吗?


    编辑以添加澄清

    1. python绝对不是必需的;我要什么都行。我只是建议在有选择的时候。
    2. 这将与ide重构结合使用;有时它并不能完成我想要的一切。
    3. 在我用于代码生成(如上所述)的实例中,它用于增加其他代码生成器的输出。例如,一个库,我们使用大量的接口输出,我们需要对每个接口进行标准实现,使其与我们的代码库相啮合。
    3 回复  |  直到 14 年前
        1
  •  2
  •   Stephen C    14 年前

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

    其次,我假定编写这样一个体面的工具或库来在Python中重构Java将是一项艰巨的任务。在Python中,你必须实现Java编译器前端(Loister-/PalScript,AST Builder和Type分析器),然后想出如何将它与程序编辑器集成。没人这么做我一点也不奇怪…考虑到成熟的替代品已经存在。

    第三,在没有对源代码进行全面分析的情况下进行重构(例如使用模式匹配)将无法进行复杂的重构,并且在实现者没有想到的边缘情况下可能会出错。我想这是手术室目前的水平…

    鉴于这种暗淡的前景,还有哪些选择:

    一种选择是使用现有的Java IDE(例如NETBeaS、Eclipse、IDEA)。作为重构工具。op将无法在python代码中扩展这样一个工具的功能,但很可能他并不需要。我希望这些ide中至少有一个能满足95%的需求,而且(如果他是现实的话)应该足够好。特别是当你认为ide有很多附带的特性,这些特性有助于使重构更容易;例如结构化编辑、撤销/重做、增量编译、智能代码完成、智能搜索、类型和调用层次结构视图等等。

    (……)如果现有的ide不够好(@wizardofods-只有op可以调用!!),尝试扩展现有IDE的重构功能比使用其他实现语言重新启动更有意义。)

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

        2
  •  0
  •   Michael Aaron Safyan    14 年前

    如果您在爪哇编码,我强烈建议您使用 NetBeans IDE . 它内置了这种重构支持。 Eclipse 也支持这种方式(尽管我更喜欢netbeans)。这两个项目都是开源的,所以如果您想了解它们是如何执行重构的,可以查看它们的源代码。

        3
  •  0
  •   Björn Pollex    14 年前

    如今Java受到了公平的批评,但在工具领域,这是不合理的。

    我们被宠坏了;eclipse、netbeans、intellij是三大ide。所有这些都提供了优秀的搜索和重构级别。我认为eclipse在netbeans上有优势,intellij常常领先于eclipse

    还可以使用findbugs、checktyle等静态分析工具来查找问题,例如方法和类过长、代码过于复杂。

    如果你真的想利用你的python技能-看看jython。它是用Java编写的Python解释器。