Deprecating all types in a unit besides deprecating the unit itself will cause a hint and warning storm. Especially in projects having a lot of hints and warnings (taking over maintenance of a legacy project comes to mind) this can be very helpful to spot these locations inside many files where some obscure unmaintained unit like GIFImage.pas
is still used.
[WayBack] TGIFImage for Delphi | MelanderBlog got donated to (then CodeGear, now Embarcadero) for inclusion in Delphi 2007. It was, as GifImg unit, but only documented since the [WayBack] Delphi 2009 GIFImg Namespace). For more information: delphi 2007 gifimg unit – Google Search
Delphi allows you to deprecate a lot of types, but you cannot deprecate these forms:
array [...] of TSomeType
^TSomeType
class of TSomeType
procedure(...) ...
function(...): TSomeType ...
reference to procedure(...) ...
reference to function(...): TSomeType ...
Putting a deprecated 'use SomeUnit.TSomeOtherType'
will fail with:
- either a compiler error pair
- “
E2029 ';' expected but identifier 'deprecated' found
“. - “
E2029 '=' expected but string constant found
“
- “
- a compiler error
E1030 Invalid compiler directive: 'DEPRECATED'
You can enumerate these kinds of types:
- enumerations
- records
- classes, but only a full class declaration, so
- not the class forward declaration like
TMyClass = class
- not a shortened class declaration like
TMyException = class(Exception)
, this has to be the fullTMyException = class(Exception) end deprecated 'reason';
- not the class forward declaration like
- methods only after the last separating
;
of the method (so thevirtual
form is likeprocedure Name(...); virtual; deprecated 'use another method';
) - named constants
- global variables
The last few are not technically types, but included for completeness.
–jeroen