Java CodeFormatter бросая NullPointerEception

У меня есть один код Java для форматирования другого кода Java программно. Код работает нормально для простого кода Java. Но когда я ввожу commnent в свой входной код Java (ввод взят как строковый код), то в следующей строке textEdit возвращается как ноль, что вызывает nullpointerexception на следующих шагах.

TextEdit textEdit = codeFormatter.format(CodeFormatter.K_UNKNOWN , code, 0, code.length(), 0, null);


import org.eclipse.jdt.core.ToolFactory;
import org.eclipse.jdt.core.formatter.CodeFormatter;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.text.edits.MalformedTreeException;
import org.eclipse.text.edits.TextEdit;

public class FormatCode {

    public static void main(String[] args) {
        String code = "public class TestFormatter{public static void main(String[] args){for(i=0;i<10;i++){i=i+2;\\abc"+"}System.out.println(\"Hello World\");}}";
        CodeFormatter codeFormatter = ToolFactory.createCodeFormatter(null);

        TextEdit textEdit = codeFormatter.format(CodeFormatter.K_UNKNOWN , code, 0, code.length(), 0, null);
        IDocument doc = new Document(code);
        try {
            textEdit.apply(doc);
            System.out.println(doc.get());
        } catch (MalformedTreeException e) {
            e.printStackTrace();
        } catch (BadLocationException e) {
            e.printStackTrace();
        }
    }
}

Любой намек на решение этой проблемы.

3 ответа

Решение

Используйте комментирование в новой строке. // комментарий используется в одной строке, поэтому ваш код такой.

Другими словами, чтобы решить эту проблему, создайте /* комментарии вместо.

Эта часть {i=i+2;\\abc" должно быть {i=i+2;//abc\n" Вы должны использовать // для комментирования not \ также вы должны создать новую строку после комментария, в противном случае остальная часть вашего кода будет в той же строке и будет закомментирована.

По сути, вы получили null от codeFormatter.format, потому что, как говорится в документации:

Возвращает ноль, если данная строка не может быть отформатирована.

Так как ваша программа не может быть правильно проанализирована (из-за проблемы с комментариями), она также не может быть отформатирована. Вы должны проверить на возвращение null от format() если есть вероятность, что тексты, которые он будет обрабатывать, не будут корректными и форматируемыми.

Другие вопросы по тегам