2010-11-11 65 views
0

作为代码清理的一部分,并迁移到新的测试框架,我需要从所有测试类中删除具有参数“String name”的构造函数(几乎1000+ * .java文件)。 例如,评论中显示的部分需要删除。自动删除.java文件中的代码行,脚本

class A extends TestCase{ 
    //This need to be deleted. 
    public A(String name){ 
     super(name); 
    } 
    // End of part to be deleted 

}

是否有任何方法使用ant脚本或使用java本身来自动执行此操作?

+0

很奇怪的要求:)我不认为任何人有这样的事情之前 – 2010-11-11 09:10:44

+0

@ org.life.java有趣的要求,我觉得。 – Sid 2010-11-11 10:37:51

回答

3

我假设你可以读取目录中的所有Java文件,并为每个Java文件读取一个字符串,然后使用正则表达式来删除构造函数......类似这样的东西?

Pattern p = Pattern.compile("class (\\w+) extends TestCase"); 
    Matcher m = p.matcher(javaSourceCode); 

    String className = ""; 
    if (m.find()) { 
     className = m.group(1); 
    } 

    String out = javaSourceCode.replaceFirst("public "+className+"\\s*\\(String name\\)\\s*\\n*\\{[\\w\\W]*?\\}", ""); 

    System.out.println(out); 
+0

很难保持源代码格式与以前相同。仍然觉得它很有用。 – nobody 2010-11-18 06:30:17

0

它的模式严格限制,我会使用sedperl这样的任务。

但我也考虑只留下冗余构造函数。他们不会造成太大的伤害,特别是如果他们都在单元测试中。

+0

不幸的是我不知道sed或perl。另外,我的客户是一个完美主义者。所以留下构造函数是不可能的。 – nobody 2010-11-11 09:54:51