2013-01-16 105 views
0

我正在寻找一种方法来分析Java代码和程序进行修改,编程修改注释Java源代码

例如,代码可能是这样的:

@FindBy(id = "login")  
WebElement btnLogin; 

@FindBy(xpath = "//div/a")  
List<WebElement> aNodes; 

和我d希望检查每个由@FindBy注释的字段,并将注释@FindBy更改为@Synchronized。

那就是:

@Synchronized 
WebElement btnLogin; 

@Synchronized 
List<WebElement> aNodes; 

不像我发现类似的问题(他们使用了Javassist或ASM修改字节码),这些注释将在运行时被删除,所以我只能在源代码级做到这一点但不在字节码级别。

到目前为止,我发现qdox,但似乎它只能分析代码,但不能修改它。

我试图自己编写正则表达式来解决它,但它似乎是一个太大的项目。

对此的任何建议?

+0

如果它真的只是你说的话,如果@Findby序列不存在于注释或字符串中,正则表达式可以做得很好。转换是否真的是上下文无关的? –

+0

也许我需要关心的唯一环境是@FindBy注释必须放在WebElement或它们的集合之前,例如列表 abuuu

+0

为什么不只是使用搜索和替换您选择的编辑器? – eis

回答

0

这个正则表达式应该是很简单的

比赛开始

"^@FindBy" 

任何行,或者,如果你担心一个奇怪的(但有效)语法(@FindBy(废话)保护无效。)

"^@FindBy(.*)" 

这就是说,你也可以用你喜欢的IDE做搜索,手动替换(Eclipse中,的IntelliJ,甚至Emacs的应该能够在所有文件中做到这一点) ,因为你似乎在做这个静态

+0

谢谢,我想尝试正则表达式。正则表达式可以匹配两行代码吗?我需要捕获WebElement字段“btnLogin”的名称以获得进一步疏理。我尝试了'^ [\ s] * @ FindBy(。*)$'并找到第一行,但是^ ^(\ s)* @ FindBy(。*)$ ^(\ s)* WebElement(。*)$ '无法找到WebElement btnLogin;在第二行。 – abuuu

+0

我用\ n而不是$并解决了这个问题,谢谢! – abuuu