不幸的是,我继承了一个基于{$IFDEF}
“地狱”的不幸设计。如何确定所有单元的依赖关系? (估计重构成本)
我有大致看起来像这样(其中MyDbSystemB
是我想补充的)
unit MyTable;
interface
uses
// ...
{$IFDEF MyDbSystemA}
DbSystemA ,
{$ENDIF}
{$IFDEF MyDbSystemB}
DbSystemB ,
{$ENDIF}
type
TMyTable = class(
{$IFDEF MyDbSystemA}
TSystemATable
{$ENDIF}
{$IFDEF MyDbSystemB}
TSystemBTable
{$ENDIF}
)
// A public interface implementation
end;
implementation
// ...
end.
一些单位参考TMyTable
,但依靠提供TSystemATable
具体功能:
unit oldUnit;
interface
uses MyDbTable;
type
TXy = class(TXyz)
public
procedure Foo();
end;
implementation
procedure TXy.Foo();
var
table : TMyTable;
begin
table := TMyTable.Create();
table.SomeSystemASpecificFunction;
end;
我想在单个引用/语法检查中找到所有这些引用。但正如我在这里看到的那样,显然不是真的可能。
找到这些文件来估计移植工作的最佳策略是什么?
一个纯文本文件的grep在所有
*.pas
文件(可能有很多要么死代码,或者只是去耦不好的东西)?我也能够提供
TMyTable = class({ ... like above }) {$IFDEF MyDbSystemB} public procedure SomeSystemASpecificFunction; deprecated; {$ENDIF} end;
与
TMyTable
的实施替代实施,但我需要估计重构成本做正确反正。关于我也可以添加
deprecated
属性以及SomeSystemASpecificFunction
替代品,这至少会给我警告。
只需将单位注释掉,看看会发生什么。解决你找到的错误,不断重新编译,看看剩下的是什么。 –
@Rudy这正是我想要避免(与那个庞大的代码库)。 – user0042
它可能是解决所有不同引用到某些类和其他标识符的唯一可行的方法。 –