如何在生成的java文件中创建导入?

时间:2013-11-08 14:33:49

标签: java import

我正在使用一个为我生成大量java代码的API。

但是这个API没有正确处理导入,所以它写了每个类的完全限定名。例如:

public class Foo{
    com.my.company.Bar bar;
    public com.my.company.Bar getBar(){
      return bar;
    }
}

我想找到一个API来发布处理这个生成的代码并编写类似的东西:

import com.my.company.Bar;

public class Foo{
    Bar bar;
    public Bar getBar(){
      return bar;
    }
}

是否有任何已知的API能够做到这一点?

2 个答案:

答案 0 :(得分:0)

从现有代码中过滤导入并非易事;想象你有两个同名但不同包的类。

我通常的方法是有一个帮助程序类来管理我的导入。在发电机中,我可以

String type = importSet.add(Foo.class);
然后在方法中使用

type来访问该类型。导入集收集所有导入并处理重复项。

为此,您需要这个“主循环”:

importSet = new ImportSet();
String body = generateClass();

out.write(importSet);
out.write(body);

即。你需要为类本身生成所有代码(随时收集导入)首先。然后将导入写入文件,然后将生成的类体写入。

如果您想更改来源,我建议使用Eclipse Java compiler,因为它可以为您提供代码的AST。然后,您可以在此树上应用各种转换。我有example in my blog how to get the AST

答案 1 :(得分:0)

据我所知,您期望生成Java代码吗?如是 。我们在项目中使用Eclipse JDT来自Eclipse IDE,他们将其用于 Java代码生成。我鼓励使用它,但是根据需要,您可以选择QDox或其他解决方案这样的简单解决方案。

您可以考虑其中一个解决方案

  • Eclipse JDT
  • JavaParser类
  • Qdox

Eclipse JDT

<强>赞成

  • 令人印象深刻的功能
  • 非常丰富的API
  • 支持Java 7功能,他们还计划支持Java 8功能
  • 可本地化的语法错误消息

<强> 精读的

  • 陡峭的学习曲线

资源 Eclipse JDT简介

http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html

如何在eclipse之外使用JDT API

How can I use the java Eclipse Abstract Syntax Tree in a project outside Eclipse? (ie not an eclipse plugin)

关于AST的好例子和项目

http://www.ibm.com/developerworks/opensource/library/os-ast/

访问Eclipse jar插件源

http://www.vogella.de/articles/EclipseCodeAccess/article.html

测试样本

http://git.eclipse.org/c/jdt/eclipse.jdt.core.git/tree/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests

<强> Qdox

<强> Pro的

  • 从头开始构建并修改
  • 轻质
  • 基于FQN类型的搜索
  • 干净且易读的API
  • 广泛的查询可能性,如isFinal(),isPrivate()
  • 面向对象的构造,java文件中的几乎所有东西都可以用JavaClass,JavaField,JavaMethod,JavaParmeter等对象来表示

<强>精读的

  • 2009-09-04最后一次公开发布是1.10,2.0快照可用
  • 1.10不支持静态导入;
  • 写入文件是预先格式化的,没有太多控制权,不能指定行号
  • 没有文章或教程,源代码是唯一的参考

资源   - Qdox http://qdox.codehaus.org/changes-report.html