Я не думаю, что можно вернуть Stream
в контекст оркестровки, поскольку в документации Bindings говорится, что возвращаемые значения должны быть сериализуемыми в JSON:
[114 ] Возвращаемые значения - Возвращаемые значения сериализуются в JSON и сохраняются в таблице истории оркестровки в хранилище таблиц Azure. Эти возвращаемые значения могут быть запрошены связыванием клиента оркестровки, описанным позже.blockquote>
Я обошел это, создав Dto, чтобы обернуть необработанный байтовый массив:
public class StreamDto { public string Name { get; set; } public byte[] Contents { get; set; } }
и вернуть его вместо этого. Поскольку он сериализуем для Json, я могу передавать его туда и обратно и воссоздавать поток в функции Activity.
Я вижу Вашу точку и полностью соглашаюсь, что такой инструмент был бы полезен при работе с унаследованным кодом. К сожалению, я не знаю ни о каком существующем инструменте (я должен добавить бесплатно распространяемый инструмент здесь, статические analyis инструменты должны, конечно, смочь сделать это легко, но я не знаю ни о каком свободном статическом инструменте анализа кода), который является способным выполнением это.
Но я предполагаю, что Вы могли легко записать такой инструмент через несколько минут. Маленький GUI с заметкой и кнопкой должен быть достаточно. Затем просто скопируйте подсказки компилятора в заметку и нажмите кнопку. Инструмент затем анализирует каждую строку. Это может легко проверить, содержит ли строка подсказку, Вы ищете, и каждая такая строка имеет ту же структуру, таким образом анализирование должно быть относительно легким. Это может затем извлечь имя файла и номер строки, открыть файл и удалить объявление переменной. Это может быть немного хитро в случае нескольких объявлений переменной в одной строке, но я думаю, что это выполнимо.
Я не знаю, является ли это слишком большим усилием для Вас по сравнению с задачей удаления всех объявлений переменной самих. Но я хотел бы видеть такой инструмент, поэтому не стесняйтесь писать это :)
Надеюсь, что помог по крайней мере немного.
Хорошо, я действительно не вижу проблем здесь. Для части парсинга:
function ParseHint (const HintText : String; out HintInfo : THintInfo) : Boolean;
var
I, J : Integer;
HintName : String;
begin
Result := False;
for I := 1 to Length (HintText) do
begin
if (HintText [I] = '(') then
begin
J := I + 1;
while (HintText [J] <> ')') do Inc (J);
HintInfo.LineNumber := StrToInt (MidStr (HintText, I+1, J-(I+1)));
HintInfo.SourceFile := MidStr (HintText, 12, I-12);
HintName := MidStr (HintText, J+3, 5);
if (HintName <> 'H2164') then Exit (False);
end;
if (HintText [I] = '''') then
begin
J := I + 1;
while (HintText [J] <> '''') do Inc (J);
HintInfo.VarName := MidStr (HintText, I+1, J-(I+1));
Exit (True);
end;
end;
end;
Ну, чтение исходного файла должно быть легким, таким образом, единственная remaing часть удаляет переменную из своей строки объявления. Мы можем просто искать происшествия HintInfo. VarName в строке и проверке, если символ прежде и после того, как происшествие не является никакими буквами, но только '''', или ':'. Если это верно, мы можем просто удалить его. Это покрывает все эти случаи:
var UnusedVar : Integer;
var
UnusedVar,
AnotherVar : Integer;
var
UnusedVar, AnotherVar : Integer;
Скажите мне, если я неправ или если бы я забыл какие-либо случаи, но я думаю, что это работало бы и решило бы проблему удаления неиспользуемых переменных от исходных файлов Дельфи с помощью сгенерированных компилятором подсказок.
Вы уверены, что переменные не должны использоваться? Я знаю, что компилятор выясняет, что они не используются прямо сейчас, но это корректно, возможно, многие из них должны использоваться, но разработчик использовал x2 вместо x1, например, копии и вставки?
В то время как Вы могли бы хотеть удалить все те нетщательно исследуемые переменные, я не буду настолько поспешным, они могли бы быть признаками ошибок в Вашем коде, что требуется зафиксировать.
Пример:
procedure PlotPixelAtCenter(rect: Rectangle)
var
x, y: Integer;
begin
x := (rect.Left + rect.Right) div 2;
x := (rect.Top + rect.Bottom) div 2; // <-- bug here, should be y :=
PlotPixel(x, y);
end;
В этом примере Вы получите ошибку о неиспользуемой переменной, но это - потаенная ошибка. Конечно, в этом примере ошибку должно быть легко найти, так как графическое изображение, вероятно, будет выключено, но другие подобные ошибки могло бы быть более трудно определить.
Решение просто, но требует в те часы, чтобы быть уверенным, что Вы не делаете ошибку. Прежде всего можно использовать Alt-F8 для продвижения через каждый отчет один за другим (и Alt-F7 для продвижения назад). Это делает определение местоположения их очень легким. Курсор помещается на строку для Вас. Затем просто нажмите '/' ключ дважды, чтобы прокомментировать его. Не удаляйте его, комментируйте его. Таким образом, если Вы делаете ошибку, Вы не потеряли информации. Присутствие переменной и ее типа данных все еще зарегистрировано. Можно убрать его позже в какой-то момент.
Один протест ко всему этому: Условная компиляция может представить некоторые переменные, неиспользованные, когда создано различные пути. Если это происходит, то просто не комментируют переменную снова и помещают условие вокруг объявления также.
Если нет такого инструмента, и у Вас есть некоторое терпение, я создаю инструмент анализа и восстановления Delphi. И удаление неиспользованных символов находится в списке. Это - низкий proirity проект, таким образом, я не могу дать оценку на когда его готовое.
Только для объяснения, почему это не тривиальная задача:
Задача 1 и 2 трудна (к счастью для меня, они уже сделаны). Язык Delphi довольно сложен. И Вам нужны все элементы языка, чтобы смочь воссоздать источник.
Задача 3 проста. Просто отметьте все символы, которые не использованы. Но остерегайтесь символов в интерфейсном разделе единицы. Они возможно не используются, но нуждались позже (или некоторым другим проектом).
Задача 4 зависит.
Aproach использование промежуточный формат (например, stringlist), можно затем использовать модель для нахождения объявления каждого неиспользованного символа (вверх дном еще, Вы возможно изменяете номера строки). Вы удаляете всех не нужных. И не забывайте удалять ключевое слово var, если это - последний var в списке!
Aproach B полностью переписывает исходный файл. В этом случае необходимо сохранить все комментарии, который не является действительно забавой сделать (но мои образцовые потребности это также). Вы просто удаляет неиспользованные символы из модели, и перепишите ее. Всегда обязательно создайте резервное копирование, потому что это может закончиться в аварии.