Я не настоящий сварщик, Груви не занимаюсь, но вот некоторые идеи:
1. Поискать в Интернете, нет ли уже чего-нибудь готового, что можно применить. 2. Самый лучший парсер кода - это компилятор Джавы. Ничего не парсить самому, а напускать компилятор и парсить список ошибок на "undefined identifier" или как он там ругается.
Сколько времени просить - 3 дня (целых, с 9 до 5) на исследование и проверку существующих опций, 2-3 недели (целых) на написание первой версии своей приблуды (но это уже зависит от скорости, с которой Вы пишите). Первую версию запускаем в бету, смотрим, все ли она ловит. Еще месяц-другой (календарных) займет довести ее до приемлемого качества, чтобы она не слишком часто падала на реальном коде. Чистого времени на починку тут будет ну, может, неделя, остальное - ожидание багов и ответов пользователей :)
Жумал про компилятор. Но, во-первых, все нужные импорты должны быть добавлены с первой итерации, во-вторых, я вот чего не понимаю: выругается groovy интерпретатор на класс, ногде его искать-то? Какой импорт добавлять? Спасибо за совет.
С очевидностью нужны таблицы имен. И так же очевидно, что дополняемый исходник не висит в воздухе, а является частью проекта. Из проектных библиотек надо вытянуть все пространства имен и наборы классов внутри.
Если же в задаче нет проектных библиотек, то их всё равно надо добавлять. Ну потому что откуда еще можно взять имена? И, кстати, существует ли гарантия, что исходник синтаксически корректен - в том смысле, что имена классов верны (без очепяток)?
Классы проекта я добавлю, не вопрос, тем более, их ограниченное количество и они разложены по пакетам, то есть, можно просто написать import my.cool.packet.*. Беда в том, что там может быть любой грувишный или джавский стандартный класс. Вот как это победить? Забить все стандарьные пакеты джавы? Их там дофигищи!
Ну вообще-то да, надо подготовить большие таблицы имен из "внешних" пакетов - не только стандартных джавы, но и третьесторонних, если они есть в проекте - вытянуть оттуда рефлексией. В принципе нужно сделать кэширование, может быть даже что-то вроде SQLite-базы добавить, куда единовременно вытянуть все полные имена классов из стандартных библиотек.
> все нужные импорты должны быть добавлены с первой итерации
Это совершенно неочевидное требование :) Что лучше - программа, которая добавляет импорты за несколько итераций, или которая вообще их не добавляет? Плюс, почему несколько итераций? Я думаю, компилятор будет ругаться на все сразу.
> выругается groovy интерпретатор на класс, ногде его искать-то? Какой импорт добавлять?"
На этот вопрос нет однозначного ответа - это, по сути, часть технрического задания. Спектр ответов может быть от "только в текущем проекте" до "лезть на Гитхаб и скачивать отттуда" :) На деле, я полагаю, брать из тикущего проекта и из JRE. Естественно, надо заранее составить их список. Самая главная проблема будет определить, что делать, если два пакета имеют классы с одинаковыми именами.
1. Поискать в Интернете, нет ли уже чего-нибудь готового, что можно применить.
2. Самый лучший парсер кода - это компилятор Джавы. Ничего не парсить самому, а напускать компилятор и парсить список ошибок на "undefined identifier" или как он там ругается.
Сколько времени просить - 3 дня (целых, с 9 до 5) на исследование и проверку существующих опций, 2-3 недели (целых) на написание первой версии своей приблуды (но это уже зависит от скорости, с которой Вы пишите). Первую версию запускаем в бету, смотрим, все ли она ловит. Еще месяц-другой (календарных) займет довести ее до приемлемого качества, чтобы она не слишком часто падала на реальном коде. Чистого времени на починку тут будет ну, может, неделя, остальное - ожидание багов и ответов пользователей :)
Reply
Спасибо за совет.
Reply
Если же в задаче нет проектных библиотек, то их всё равно надо добавлять. Ну потому что откуда еще можно взять имена? И, кстати, существует ли гарантия, что исходник синтаксически корректен - в том смысле, что имена классов верны (без очепяток)?
Reply
Беда в том, что там может быть любой грувишный или джавский стандартный класс. Вот как это победить? Забить все стандарьные пакеты джавы? Их там дофигищи!
Reply
Reply
Reply
Reply
Это совершенно неочевидное требование :) Что лучше - программа, которая добавляет импорты за несколько итераций, или которая вообще их не добавляет? Плюс, почему несколько итераций? Я думаю, компилятор будет ругаться на все сразу.
> выругается groovy интерпретатор на класс, ногде его искать-то? Какой импорт добавлять?"
На этот вопрос нет однозначного ответа - это, по сути, часть технрического задания. Спектр ответов может быть от "только в текущем проекте" до "лезть на Гитхаб и скачивать отттуда" :) На деле, я полагаю, брать из тикущего проекта и из JRE. Естественно, надо заранее составить их список. Самая главная проблема будет определить, что делать, если два пакета имеют классы с одинаковыми именами.
Вы смотрели вот на это: https://github.com/serv-inc/javimp?
Reply
Leave a comment