Алексей Владыкин


Checkstyle: unexpected char 0xFFFF

13 декабря 2010

Погоняв недавно Checkstyle на коде рабочих проектов, обнаружил в логах большое количество ошибок вида:

Got an exception - unexpected char: 0xFFFF

Как выяснилось, Checkstyle выдает такую ошибку на любом Java-файле, оканчивающемся однострочным комментарием без перевода строки в конце. Пример:

class Bug {
} // no line feed here, just EOF

Checkstyle последний, версии 5.3. Подходящего бага в официальном багтрекере не нашел, поэтому завел новый.

Все чудесно, но как быть, пока баг не исправят? Ведь видеть эту ругань в отчетах Checkstyle совсем не хочется.

Решение очевидно: добавить перевод строки во все "плохие" файлы. Учитывая количество таких файлов, решил автоматизировать процесс и за пять минут написал скриптик на Groovy:

import java.util.regex.Pattern
import groovy.io.FileType

Pattern pattern = Pattern.compile('//.*\\z')

new File(args[0]).traverse(
    type: FileType.FILES,
    nameFilter: ~/.*\.java/
) { file ->
    String text = file.text
    if (pattern.matcher(text).find()) {
        println "Fixing ${file}"
        file.text = text + "\r\n"
    }
}

К оглавлению блога