Требуется система Program Transformation .
У хороших есть парсеры для языка, который вам небезразличен, создайте AST, представляющие программу для проанализированного кода, предоставьте вам доступ кAST для анализа и модификации, и может восстановить исходный текст из AST.Ваше замечание о «сканировании полей» является всего лишь прохождением AST, представляющего программу.Для каждого интересного результата анализа, который вы производите, вы хотите внести изменения в AST, возможно, где-то еще, но тем не менее в AST.И после того, как все ошибки сделаны, вы хотите регенерировать текст с комментариями (как первоначально введено, или как вы создали в своем новом коде).
Есть несколько инструментов, которые делают это специально для Java.
Джекпот предоставляет синтаксический анализатор, создает AST и позволяет кодировать Java-процедуры для выполнения того, что вы хотите с деревьями.Перевернутый: легко концептуально.Недостаток: вы пишете гораздо больше Java-кода, чтобы лазить по деревьям / взламывать их, чем вы ожидаете.Джекпот работает только с Java.
Stratego и TXL анализирует ваш код, создает AST и позволяет вам записывать преобразования "surce-to-source" (используя синтаксисцелевого языка (например, Java в данном случае) для выражения шаблонов и исправлений.Дополнительные хорошие новости: вы можете определить любой язык программирования, который вам нравится, в качестве целевого языка для обработки, и оба из них имеют определения Java.Но они слабы в анализе: часто вам нужны таблицы символов и анализ потока данных, чтобы действительно провести анализ и необходимые изменения.И они настаивают на том, что все является правилом переписывания, помогает ли это вам или нет;это немного похоже на настаивание на том, что вам нужен только молоток в наборе инструментов;в конце концов, все можно рассматривать как гвоздь, не так ли?
Наш инструментарий реинжиниринга программного обеспечения DMS позволяет определять произвольный целевой язык (и имеет множество предопределенных языков, включая Java ), включает в себя все возможности преобразования источника в источник в Stratego, TXL, процедурные возможности джекпота и дополнительно предоставляет таблицы символов, информацию управления и анализа потока данных.Ребята из компилятора научили нас, что эти вещи необходимы для создания сильных компиляторов (= «анализ + оптимизация + уточнение»), и это верно и для систем генерации кода, по точно таким же причинам.Используя этот подход, вы можете генерировать код и оптимизировать его в той степени, в которой у вас есть для этого знания.Один пример, аналогичный вашим идеалам сериализации, - это создание быстрых программ чтения и записи XML для указанных XML DTD;мы сделали это с помощью DMS для Java и COBOL.
DMS использовалась для чтения / изменения / записи многих типов исходных файлов.Хороший пример, который прояснит идеи, можно найти в этом техническом документе, который показывает, как изменить код для вставки измерительных зондов: Покрытие для филиала Made Easy .Более простой, но более полный пример определения произвольных языков и преобразований для применения к нему можно найти в Как преобразовать алгебру , используя те же идеи.