TRttiIndexedProperty нельзя перенести обратно на старые версии Delphi, потому что это зависит от того, как компилятор записывает данные RTTI для индексированных свойств, что делает только компилятор Delphi XE2.Вы не можете прочитать то, чего там нет.
Единственная возможность, которую вы имеете, - это записать эти данные вручную.Таким образом, вы должны написать синтаксический анализатор, который запускает весь ваш код и генерирует необходимую информацию о типе для всех индексированных свойств.А поскольку ваш синтаксический анализатор не является компилятором, вам также придется писать небольшие вспомогательные функции, которые пишут и читают свойство indexed.Вывод может быть примерно таким:
TMyClass = class
private
...
public
property MyArray[Index: Integer]: TMyObject read GetMyArray write SetMyArray;
// autogenerated code
class procedure RegisterIndexedPropertyInfos(Registry: TMyRttiIndexedPropertyRegistry); static;
end;
// autogenerated code
class procedure TMyClass.RegisterIndexedPropertyInfos(Registry: TMyRttiIndexedPropertyRegistry): TMyRttiIndexedProperty;
begin
Registry.Register('MyArray', [TMyRttiIndex.Create('Index', TypeInfo(Integer))], TypeInfo(TMyObject), @TMyClass.GetMyArray, @TMyClass.SetMyArray);
end;
// When using RichRTTI you can omit this line and use the the RttiContext to find RegisterIndexedPropertyInfos
RegisterIndexedPropertyClass(TMyClass, @TMyClass.RegisterIndexedPropertyInfos);