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()
если есть вероятность, что тексты, которые он будет обрабатывать, не будут корректными и форматируемыми.