Автоматическое создание импортов

Jul 17, 2020 19:43

Поставили задачу. Есть файл с исходным кодом Groovy класса. В коде не хватает импортов, их надо автоматически создать ( Read more... )

Leave a comment

Comments 8

yatur July 17 2020, 18:44:59 UTC
Я не настоящий сварщик, Груви не занимаюсь, но вот некоторые идеи:

1. Поискать в Интернете, нет ли уже чего-нибудь готового, что можно применить.
2. Самый лучший парсер кода - это компилятор Джавы. Ничего не парсить самому, а напускать компилятор и парсить список ошибок на "undefined identifier" или как он там ругается.

Сколько времени просить - 3 дня (целых, с 9 до 5) на исследование и проверку существующих опций, 2-3 недели (целых) на написание первой версии своей приблуды (но это уже зависит от скорости, с которой Вы пишите). Первую версию запускаем в бету, смотрим, все ли она ловит. Еще месяц-другой (календарных) займет довести ее до приемлемого качества, чтобы она не слишком часто падала на реальном коде. Чистого времени на починку тут будет ну, может, неделя, остальное - ожидание багов и ответов пользователей :)

Reply

m_f July 17 2020, 19:01:02 UTC
Жумал про компилятор. Но, во-первых, все нужные импорты должны быть добавлены с первой итерации, во-вторых, я вот чего не понимаю: выругается groovy интерпретатор на класс, ногде его искать-то? Какой импорт добавлять?
Спасибо за совет.

Reply

moonwalker72 July 17 2020, 22:09:29 UTC
С очевидностью нужны таблицы имен. И так же очевидно, что дополняемый исходник не висит в воздухе, а является частью проекта. Из проектных библиотек надо вытянуть все пространства имен и наборы классов внутри.

Если же в задаче нет проектных библиотек, то их всё равно надо добавлять. Ну потому что откуда еще можно взять имена? И, кстати, существует ли гарантия, что исходник синтаксически корректен - в том смысле, что имена классов верны (без очепяток)?

Reply

m_f July 17 2020, 22:54:45 UTC
Классы проекта я добавлю, не вопрос, тем более, их ограниченное количество и они разложены по пакетам, то есть, можно просто написать import my.cool.packet.*.
Беда в том, что там может быть любой грувишный или джавский стандартный класс. Вот как это победить? Забить все стандарьные пакеты джавы? Их там дофигищи!

Reply


Leave a comment

Up