У меня есть флеш-проект, который для целей оптимизации должен содержать постоянные ссылки, заменяемые литералами во время сборки выпуска.
Есть сотни констант, которые я хочу заменить. Все они хранятся в одном файле в следующем формате:
FILE: Constants.as
public static const CONST_1 :uint = 0;
public static const CONST_LOLO :int = -1;
public static const CONST_WHEE :Number = 2.55;
public static const OTHER_CONST :String = "La string!";
public static const ITSAMEMARIO :String = "O, HAI!";
public static const MAGE_WALL :uint = 15;
Полагаю, я мог бы сделать это вручную, вот так:
<replaceregexp match="CONST_1" replace="0">
<fileset dir="${project.sourcePath}" includes="**/*.as" />
</replaceregexp>
<replaceregexp match="CONST_LOLO" replace="-1">
<fileset dir="${project.sourcePath}" includes="**/*.as" />
</replaceregexp>
И так далее для всех остальных переменных. Проблема двоякая - во-первых, это довольно много работы. Но большая проблема в том, что эти константы могут изменяться, и я должен был бы помнить, чтобы сделать изменение в двух местах.
Обычно я использую Ant (который я только начал изучать) для выполнения этой задачи, но если вы думаете, что есть лучший способ, я весь в ушах. Я могу придумать два решения, ни одно из которых я не знаю, как выполнить:
- Напишите какой-нибудь фрагмент кода Ant для умных штанов, который проанализирует этот файл констант и с радостью выполнит замены, сохранив все в памяти.
- Заставьте задачу сначала разобрать Constants.as , выведите новый скрипт Ant, который затем будет выполнен первой задачей.
Я использую Flash Builder 4.5 для всех своих потребностей в Ant.
EDIT:
Некоторые уточнения. В проекте я использую константы, например LEVEL_WIDTH. Все эти константы объявлены в вышеупомянутых Constants.as. Теперь я хочу заменить все экземпляры этих констант во всем проекте их действительными значениями. Так что такая строка:
return (x >= 0 && x < Constants.LEVEL_WIDTH);
будет заменено на:
return (x >= 0 && x < 20);