Delphi Declarations and Statements: Hinting Directives
Posted by jpluimers on 2019/02/06
From [WayBack] Declarations and Statements: Hinting Directives you might remember this:
The ‘hint’ directives platform, deprecated, and library may be appended to any declaration. These directives will produce warnings at compile time. Hint directives can be applied to type declarations, variable declarations, class, interface and structure declarations, field declarations within classes or records, procedure, function and method declarations, and unit declarations.
However, it doesn’t as at least these fail:
type
{ [dcc32 Error] ClassConstUsageConsoleProject.dpr(14): E1030 Invalid compiler directive: 'DEPRECATED' }
TMyProcedure = procedure() of object deprecated 'do not use TMyProcedure';
{ [dcc32 Error] E1030 Invalid compiler directive: 'DEPRECATED' }
TMyReference = reference to procedure() deprecated 'do not use TMyReference';
These two helped me though:
- [WayBack] Is there any way to mark an anonymous as deprecated?… – Agustin Ortu – Google+
- [WayBack] How to deprecate an Array type declaration in Delphi? – Stack Overflow.
This fails too:
type
{ [dcc32 Error] E2029 '=' expected but ';' found }
TArrayChars = array of Char; deprecated;
{ [dcc32 Error] E2029 ';' expected but identifier 'deprecated' found }
TArrayChars = array of Char deprecated;
But this is a workaround:
type TArrayCharsOld = array of Char; TArrayChars = TArrayCharsOld deprecated;
Which works for the procedure types as well:
type TMyProcedureOld = procedure() of object; TMyProcedure = TMyProcedureOld deprecated 'do not use TMyProcedure'; TMyReferenceOld = reference to procedure(); TMyReference = TMyReferenceOld deprecated 'do not use TMyReference';
Bug https://quality.embarcadero.com/browse/RSP-18316
–jeroen






Remy Lebeau said
‘deprecated’ does not work on ‘property’ declarations, either.