Ant replaceTokens с номерами строк и именами файлов - PullRequest
1 голос
/ 13 августа 2010

Есть ли способ в скрипте Ant использовать задачу <copy> (replaceTokens) для предварительной обработки файлов Java и заменить строку "__FILE__" именем файла скопированного файла и "__LINE__" номером строки в этом файле? Это будет иметь большое значение для решения проблемы отсутствия препроцессора в Java.

В документах по replaceTokens приведены примеры исправленных замещающих строк, но я не могу найти способ, чтобы Ant вставил соответственно имя файла и номер строки.

Нужно ли мне писать свой собственный обработчик задач?

1 Ответ

0 голосов
/ 22 октября 2010

Вот что я придумал. Это __LINE__, но не __FILE__. Ну да ладно: - (.

<target name="preprocess" description="Preprocess the source code">
    <mkdir dir="${target.generated.dir}"/>
    <copy todir="${target.generated.dir}" includeemptydirs="true" failonerror="true" verbose="true">
        <fileset dir="${source.dir}">
            <exclude name="${source.main.resources.dir}"/>
        </fileset>
        <filterchain>
            <tokenfilter>
                <filetokenizer/>
                <scriptfilter language="beanshell" byline="true"><![CDATA[
                    import java.io.BufferedReader;
                    import java.io.StringReader;
                    int count = 1;
                    BufferedReader br = new BufferedReader(new StringReader(self.getToken()));
                    StringBuilder builder = new StringBuilder();
                    String line;
                    while ((line = br.readLine()) != null) {
                        builder.append(line.replace("\"__LINE__\"", Integer.toString(count))).append('\n');
                        count++;
                    }
                    self.setToken(builder.toString());
                ]]></scriptfilter>
            </tokenfilter>
        </filterchain>
    </copy>
</target>
...