Вопрос

У меня есть довольно большое количество исходных файлов, которые мне нужно проанализировать и извлечь все строковые литералы и поместить их в файл как константу play old java.
Например,:

Label l = new Label("Cat");

Стал бы:

Label l = new Label(Constants.CAT);

И в Constants.java Я бы так и сделал:

public final static String CAT = "Cat";

Я не хочу, чтобы строки были экстернализованы в текстовом файле свойств.
Одна из причин заключается в согласованности и удобочитаемости кода.
Другой заключается в том, что наш клиентский код использует GWT, который не поддерживает механизм текстовых файлов свойств Java.

Я мог бы написать какой-нибудь синтаксический анализатор (возможно, используя ant replace task)?
Но я задавался вопросом, может ли IDE уже делает подобные вещи автоматически.

Это было полезно?

Решение

Чтобы завершить ответ Питера Келли, вы могли бы рассмотреть для eclipse IDE АСТ решение.

Затем вы могли бы написать программу AST, которая анализирует ваш исходный код и делает то, что вы хотите.

Полный пример доступен здесь угловая статья eclipse, также более подробная информация приведена в справка eclipse.
И вы можете найти несколько примеров в Листинг 5 раздела "Внедрение перевода на месте" из Автоматизация встраивания языков, специфичных для конкретной предметной области, в Eclipse JDT, рядом с несколько примеров в проектах GitHub.

Другие советы

Eclipse делает это автоматически.Щелкните правой кнопкой мыши файл, выберите "Исходный код", затем "Externalize strings".

Это не совсем то, что вы просили (наличие строк в файле Constants.java в виде строк), но используемый метод действительно очень мощный.Он перемещает их в файл свойств, который может быть загружен динамически в зависимости от вашего региона.Наличие их в отдельном исходном файле Java, как вы предлагаете, означает, что у вас будут либо ВСЕ языки в вашем приложении сразу, либо вы будете отправлять разные приложения в зависимости от локали.

Мы используем его для наших приложений, где даже базовые материалы должны поставляться на английском и японском языках - наши более сложные приложения поставляются на 12 языках - мы ни в коем случае не маленькая компания по разработке программного обеспечения :-).

Если вы делай хотите, чтобы они были в файле Java, несмотря на уже упомянутые недостатки, намного проще написать программу для преобразования файла свойств в исходный файл Java, чем пытаться извлечь строки из исходного кода Java в произвольной форме.

Все, что вам затем нужно сделать, это изменить класс доступа, чтобы использовать встроенные строки (в отдельном классе), а не загружать их во время выполнения.

Есть несколько веских причин, по которым вы не хотели бы этого делать.Помимо того факта, что любой такой сгенерированный файл (я не знал о функции eclipse) не будет различать строки, которые вы устанавливаете, например, в качестве аргументов конструктора в тестовых классах, и вещи, которые вы на самом деле хотите иметь в качестве констант, более серьезная проблема заключается в том, что все ваши общедоступные статические финалы будут скомпилированы в ваши классы, и если вы хотите изменить поведение классов, вам нужно будет изменить не только класс, содержащий константы, но и все, что на него ссылается.

Я полностью признаю то, что сказал Пакс Диабло.Мы тоже используем эту функцию.

При применении к файлу класса функция "Externalize strings" создаст два файла: class Messages.class и файл свойств messages.properties.Затем он перенаправит все прямые использования строковых литералов на вызов Messages.get(строковый ключ) и использует ключ, который вы ввели для строки в "Ext.Мастер "Строка".

Кстати:Что такого плохого в файлах свойств?Как он сказал, вы можете просто изменить файл свойств, и вам не нужно менять класс, если вам нужно изменить текст.

Еще одно преимущество заключается в следующем:Способ извлечения строковых литералов в файл свойств позволяет вам свободно переводить исходный язык на любой язык, который вы хотите без изменения какого-либо кода.Загрузчик файлов свойств автоматически загружает файл целевого языка, используя соответствующий файл с iso-кодом языка.Таким образом, вам не нужно беспокоиться о платформе, на которой работает ваш код, он выберет подходящий язык (почти) автоматически.Смотрите документацию класса Связка ресурсов подробно о том, как это работает.

Возможно, вы захотите ознакомиться с Механизм преобразования источника джекпота в NetBeans, который позволил бы вам создавать сценарии ваших исходных преобразований.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top