我有相当多的源文件,我需要解析并提取所有字符串文字,并将它们作为播放旧的Java常量放在一个文件中.
举个例子:
Label l = new Label("Cat");
会成为:
Label l = new Label(Constants.CAT);
而且Constants.java
我会:
public final static String CAT = "Cat";
我不希望字符串在属性文本文件中外部化.
一个原因是一致性和代码可读性.
另一个是我们的客户端代码使用GWT
,它不支持Java属性文本文件机制.
我可以写一些解析器(可能使用ant替换任务)?
但我想知道是否IDE
已经自动完成了这类事情.
Eclipse会自动执行此操作.右键单击该文件,选择"Source",然后选择"Externalize strings"
这并不完全符合您的要求(将Constants.java文件中的字符串作为字符串),但使用的方法确实非常强大.它将它们移动到属性文件中,该文件可以根据您的语言环境动态加载.如您所建议的那样将它们放在单独的Java源文件中意味着您可以立即在应用程序中使用所有语言,或者根据区域设置提供不同的应用程序.
我们将它用于我们的应用程序,即使基本的东西必须用英语和日语发货 - 我们更复杂的应用程序有12种语言 - 我们不是一个小型的软件开发公司:-).
如果你确实想要它们在Java文件中,尽管已经提到了这些缺点,编写程序将属性文件转换为Java源文件比尝试从自由格式Java源提取字符串要容易得多.
您需要做的就是修改Accessor类以使用内置字符串(在单独的类中),而不是在运行时加载它们.
要完成Peter Kelley的回答,你可以考虑使用eclipse IDE AST解决方案.
然后,您可以编写一个AST程序来解析源代码并执行您想要的操作.
这个eclipse角文章中提供了一个完整的例子,还有eclipse帮助中的更多细节.
您可以在清单5中找到自动化在Eclipse JDT中嵌入领域特定语言的 "就地翻译实现"部分的一些示例,以及GitHub项目中的多个示例.