Устранить предупреждения Javac для JSP в исходных файлах Java, сгенерированных Jasper? - PullRequest
2 голосов
/ 23 апреля 2009

При предварительной компиляции JSP с помощью компилятора Jasper (с использованием Tomcat), а затем с помощью компилятора Java я вижу javac предупреждения, подобные этому (у меня включен флаг javac -Xlint):

warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.List
_jspx_dependants.add("/some-jsp.jspf");

Теперь, это "просто предупреждение", но мне нравятся чистые сборки, поэтому, естественно, я хочу избавиться от предупреждения. Конечно, я мог бы отключить -Xlint для компиляции JSP, но -Xlint - это хороший материал, так что он остается.

В этом примере предупреждения проблема в том, что общий синтаксис не используется. Вместо List<String> у нас есть только List. Я понимаю, что хорошие люди, которые пишут Джаспер, должны заботиться о тех несчастных душах, которые остаются запертыми в мире до Java5. Это хорошо, но почему я должен терпеть эти предупреждения?

Существует ли какой-либо известный способ устранения предупреждений javac, вызванных исходным кодом Java, созданным JSP-компилятором Jasper? Меня не интересует решение, специфичное для IDE (хотя это было бы частичное решение для некоторых людей, которые используют конкретную IDE). Я ищу общеприменимое решение.

Сканирование исходного кода Jasper не выявило каких-либо переключателей «Java 5+», которые могли бы вызвать генерацию общего синтаксиса. На самом деле наоборот я нашел это:

apache-tomcat-6.0.18-src/java/org/apache/jasper/compiler/Generator.java:494:            out.printin("_jspx_dependants = new java.util.ArrayList(");

, который ясно показывает жестко закодированный код, лишенный всякой надежды на внедрение элегантного общего синтаксиса.

Ответы [ 2 ]

1 голос
/ 23 апреля 2009

Отключите предупреждения, о которых вы знаете, что их не волнует:

-Xlint: -xxx
Отключить предупреждение xxx, где xxx - одно из имен предупреждений поддерживается для -Xlint: xxx, ниже.

См. здесь .

0 голосов
/ 23 апреля 2009

Я использую сборку на основе Ant. Мое текущее решение этой проблемы состоит в том, чтобы отредактировать сгенерированный Джаспером Java-код на месте со следующим кодом фильтрации Ant:

<move todir="WEB-INF/src">
    <fileset dir="WEB-INF/src"/>
    <globmapper from="*.java"
                to="*.java.foo"/>
    <filterchain>
        <tokenfilter>
            <replacestring from="private static java.util.List _jspx_dependants;"
                           to="private static java.util.List&lt;String&gt; _jspx_dependants;"/>
            <replacestring from="_jspx_dependants = new java.util.ArrayList"
                           to="_jspx_dependants = new java.util.ArrayList&lt;String&gt;"/>
            <replaceregex pattern="public final class (.*) extends org.apache.jasper.runtime.HttpJspBase"
                          replace="@SuppressWarnings(&quot;serial&quot;)&#xA;public final class \1 extends org.apache.jasper.runtime.HttpJspBase"/>
            <replacestring from="(PageContext)_jspx_page_context"
                           to="_jspx_page_context"/>
        </tokenfilter>
    </filterchain>
</move>
<move todir="WEB-INF/src" overwrite="true">
    <fileset dir="WEB-INF/src"/>
    <globmapper from="*.java.foo" to="*.java"/>
</move>

Пожалуйста, посмотрите этот вопрос , чтобы понять "двойной ход".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...