Сбой компиляции после инструментария Clover в Java 7 try-with-resources - PullRequest
1 голос
/ 28 декабря 2011

Я использую простой оператор try-with-resources, такой как:

try (final CSVWriter w = new CSVWriter(new OutputStreamWriter(r.getOutputStream(), "UTF-8"));){
    //do stuff......
}

Он прекрасно компилируется с помощью обычной задачи javac Ant, но когда у меня сначала инструмент Clover, кодРезультирующий код больше не компилируется (см. сообщение компиляции, включенное ниже).

Согласно документации , эта версия Clover поддерживает Java 7. Кто-нибудь еще сталкивался с этой проблемой или имеет какое-либо представление о том, в чем проблема?

Версия Java:

java version "1.7.0"
Java(TM) SE Runtime Environment (build pxi3270-20110827_01)
IBM J9 VM (build 2.6, JRE 1.7.0 Linux x86-32 20110810_88604 (JIT enabled, AOT enabled)
J9VM - R26_Java726_GA_20110810_1208_B88592
JIT  - r11_20110810_20466
GC   - R26_Java726_GA_20110810_1208_B88592
J9CL - 20110810_88604)
JCL - 20110809_01 based on Oracle 7b147

Вывод задачи Ant:

compile:
     [echo] Compiling source code...
    [javac] Compiling 135 source files to /home/*********/WEB-INF/classes
   [clover] Clover Version 3.1.2, built on November 07 2011 (build-842)
   [clover] Loaded from: /home/*******/clover.jar
   [clover] Clover: Commercial License registered to *******.
   [clover] Updating existing database at '/home/********/dist/clover/clover.db'.
   [clover] Processing files at 1.7 source level.
   [clover] Clover all over. Instrumented 135 files (12 packages).
   [clover] Elapsed time = 1.597 secs. (84.534 files/sec, 12,463.369 srclines/sec)
    [javac] /tmp/clover2218935617827048125.tmp/com/****/web/DownloadService.java:232: error: illegal start of type
    [javac]                 __CLR3_1_24ae4aegwpi0zhh.R.inc(5592);try (new java.lang.AutoCloseable() {{__CLR3_1_24ae4aegwpi0zhh.R.inc(5593);}public void close(){}};CSVWriter w = new CSVWriter(new OutputStreamWriter(response.getOutputStream(), "UTF-8"));){

1 Ответ

1 голос
/ 14 июня 2012

Кажется, что использование необязательной конечной точки с запятой для завершения списка ресурсов в try-with-resources недопустимо в вашей версии JDK, это незаконно в соответствии с JSR 334 .

Проверить документацию :

SYNTAX: Существующий набор грамматических произведений для TryStatement в JLS §14.20 дополнен:

TryStatement:
    try ResourceSpecification Block Catchesopt Finallyopt 

Supporting new grammar productions are added:

ResourceSpecification:
    ( Resources ) 
Resources:
    Resource 
    Resource ; Resources 
Resource:
    VariableModifiers Type VariableDeclaratorId = Expression 
    Expression 

[Следствием комбинированной грамматики является то, что оператор try должен содержать хотя бы одно из предложения catch, блока finally и спецификации ресурса. Кроме того, допустимо, чтобы оператор try имел ровно один из этих трех компонентов. Обратите внимание, что в спецификации ресурса нельзя указывать конечную точку с запятой .]

Попробуйте опустить последнюю точку с запятой:

try (final CSVWriter w = new CSVWriter(new OutputStreamWriter(r.getOutputStream(), "UTF-8"))){
//do stuff......
}
...