我目前正在处理一些“继承”的代码,其中散布着许多基于Delphi版本的条件编译指令,从Delphi 2开始。从现在开始,所有开发都将使用Delphi 2009或更高版本。在Delphi 2009中是否有一个工具或插件,可以自动删除基于指定“最低”版本的编译器条件代码段?
我目前正在处理一些“继承”的代码,其中散布着许多基于Delphi版本的条件编译指令,从Delphi 2开始。从现在开始,所有开发都将使用Delphi 2009或更高版本。在Delphi 2009中是否有一个工具或插件,可以自动删除基于指定“最低”版本的编译器条件代码段?
你应该尝试使用 JCL中的JEDI PreProcessor(Pascal PreProcessor)。
在我们的SVN中,源代码可以在 jcl / devtools / jpp目录中找到,在我们的最新版本(2.1)zip文件中,jpp.exe可以在devtools目录中找到。
我不知道有这样的工具,但编写它应该相对简单。
FindFirst
和 FindNext
循环遍历目录中的所有文件。TStringList.LoadFromFile
读取所有 pas 文件。{$IfDef}
指令。如果条件部分中指定的版本早于 D2009,则删除所有文本直到 {$EndIf}
。TStringList.SaveToFile
将修改后的文件写入磁盘。我的建议是仅更改您完全管理的代码。但如果您也要修改现有的第三方代码,那么我建议您查看每个IFDEF定义以进行验证。一些供应商不使用标准的IFDEF VERxxx调用,而是创建自己的调用方式,可能被称为VER70UP或类似名称。这种情况最常见的地方是在包含文件中,因此请查找每个文件开头附近的{$I ???.INC}文件,然后分析其中使用的内容和方法。
分析每个$DEFINE/$UNDEF的另一个原因是特定版本可能会打开先前未检查的新定义...最终导致死代码。
使用GExperts,您可以使用GrepSearch或GrepRegularExpressions在代码中进行搜索,然后在GrepResults中使用Replace工具删除任何需要的内容。
您可以对列表中的所有匹配项执行搜索和替换操作,也可以仅对选定的文件/匹配项执行操作。选择其中一种选项时,会出现一个对话框提示要使用的字符串以替换匹配的文本。请注意,由于IDE的限制,当前打开的窗体无法替换其文本。在尝试替换其中的文本之前,请关闭所有窗体。