Извлечь всю строку из проекта java
У меня довольно большое количество исходных файлов, которые мне нужны для синтаксического анализа и извлечения всех строковых литералов, и помещаем их в файл как старую константу java.
Например:
Label l = new Label("Cat");
Стало бы:
Label l = new Label(Constants.CAT);
И в Constants.java
я бы:
public final static String CAT = "Cat";
Я не хочу, чтобы строки были экстернализированы в текстовом файле свойств.
Одна из причин заключается в согласованности и удобочитаемости кода.
Другим является то, что в нашем клиентском коде используется GWT
, который не поддерживает механизм текстовых файлов Java.
Я мог бы написать какой-то парсер (используя ant заменить задачу, возможно)?
Но я подумал, что IDE
уже делает это автоматически.
Ответы
Ответ 1
Чтобы закончить ответ Питера Келли, вы можете рассмотреть для Eclipse IDE решение AST.
Затем вы можете написать программу AST, которая анализирует исходный код и делает то, что вы хотите.
Полный пример доступен в этой заголовок eclipse, а также более подробная информация в помощь eclipse.
И вы можете найти несколько примеров в Листинг 5 раздела "Внедрение перевода на месте" Автоматизация встраивания доменных специфических языков в Eclipse JDT, наряду с несколько примеров в проектах GitHub.
Ответ 2
Eclipse делает это автоматически. Щелкните файл правой кнопкой мыши, выберите "Источник", затем "Внешние строки"
Это не делает то, что вы запросили (имея строки в файле Constants.java как строки), но используемый метод очень эффективен. Он перемещает их в файл свойств, который может быть загружен динамически в зависимости от вашей локали. Имея их в отдельном исходном файле Java, как вы предлагаете, вы либо будете иметь ВСЕ языки в своем приложении одновременно, либо вы будете отправлять различные приложения в зависимости от языка.
Мы используем его для наших приложений, где даже базовый материал должен поставляться на английском и японском языках - наши более сложные приложения поставляются с 12 языками - мы не являемся небольшой компанией по разработке программного обеспечения любыми способами: -).
Если вы захотите их в файле Java, несмотря на недостатки, о которых уже упоминалось, гораздо проще написать программу для преобразования файла свойств в исходный файл Java, чем пытаться извлечь строки из свободной формы Источник Java.
Все, что вам нужно сделать, это изменить класс Accessor, чтобы использовать встроенные строки (в отдельном классе), а не загружать их во время выполнения.
Ответ 3
Есть несколько веских причин, почему вы не хотели бы этого делать. Помимо того факта, что любой такой сгенерированный файл (я не знал о функции eclipse) не собирался различать строки, которые вы устанавливаете, например, как конструктор args в тестовых классах и вещах, которые вы на самом деле хотите иметь, как константы, большая проблема заключается в том, что все ваши публичные статические финалы собираются компилироваться в ваши классы, и если вы хотите изменить поведение классов, вам нужно будет изменить не только класс, содержащий константы, но и все, что ссылается на него.
Ответ 4
Я полностью понимаю, что сказал Пакс Диабло. Мы также используем эту функцию.
При применении к файлу класса функция "Внешние строки" создаст два файла, класс Message.class и файл свойств messages.properties. Затем он перенаправляет все прямые использования строковых литералов на вызов Message.get(String key) и использует ключ, введенный для строки в мастере "Ext. String".
BTW: Что плохого в файлах свойств? По его словам, вы можете просто изменить файл свойств и не менять класс, если вам нужно изменить текст.
Еще одно преимущество заключается в следующем: способ извлечения строковых литералов в файл свойств позволяет вам свободно переводить исходный язык на любой язык, на который вы хотите , без изменения кода. Файл-загрузчик свойств загружает файл целевого языка автоматически, используя соответствующий файл с кодом языка iso. Поэтому вам не нужно беспокоиться о платформе, на которой работает ваш код, и автоматически выбирает соответствующий язык (почти). См. Документацию по классу ResourceBundle для того, как это работает подробно.
Ответ 5
Возможно, вы захотите проверить механизм преобразования исходного кода джекпота в NetBeans, который позволит вам script преобразовать исходные тексты.