Как получить структуру модуля с помощью ToolsAPI в Delphi? - PullRequest
3 голосов
/ 19 июня 2010

Я хочу получить информацию о структуре модуля (единицы паскаля) с помощью ToolsAPI. так же, как это делает представление структуры в IDE.

Классы, Записи, Интерфейсы, Переменные / Константы и т. Д. Члены, параметры и т. Д.

Существует ли простой и эффективный способ получения этих метаданных?

Ответы [ 2 ]

4 голосов
/ 19 июня 2010

AFAIK нет способа запросить специальную структурированную информацию для данного файла.

Что вы можете сделать, так это получить доступ к информации на панели структуры. Этот способ требует, чтобы файл был активным модулем (это может быть достигнуто OTA), вывод зависит от настроек панели структуры (Инструменты | Параметры ... -> Параметры среды | Проводник) и, если узел является полем, процедура или что-то еще должно быть определено по индексу изображения, родитель ...

Этот код проходит через панель структуры.

procedure StructureViewToSL(ASL: TStringList);

  procedure TreeToSL(ANode: IOTAStructureNode; ASL: TStringList; const APrefix: string);
  var
    I: Integer;
  begin
    ASL.Add(APrefix + ANode.Caption);
    for I := 0 to ANode.ChildCount - 1 do
      TreeToSL(ANode.Child[I], ASL, APrefix + '  ');
  end;

var
  StructureView: IOTAStructureView;
  StructureContext: IOTAStructureContext;
  Node: IOTAStructureNode;
  I: Integer;
begin
  StructureView := BorlandIDEServices as IOTAStructureView;
  StructureContext := StructureView.GetStructureContext;
  for I := 0 to StructureContext.RootNodeCount - 1 do
  begin
    Node := StructureContext.GetRootStructureNode(I);
    TreeToSL(Node, ASL, '');
  end;
end;
2 голосов
/ 19 июня 2010

Может быть, использование парсера не так уж плохая идея?

...