2014-11-17 3 views
0

У меня есть один java-код для форматирования другого java-кода programaticlly. Код работает отлично для простого java-кода. Но когда я вношу commnent в свой код ввода java (ввод принят как код String), то в следующей строке textEdit возвращается как null, который вызывает появление nullpointerexception в следующих шагах.java codeformatter throwing NullPointerEception

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(); 
     } 
    } 
} 

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

+0

Покажите нам трассировку стека NPE –

+0

Вы инициализируете кодFormatter с 'null', это правильно? – ha9u63ar

+0

Я взял код с ответа этого сообщения: http: //stackoverflow.com/questions/16015240/formatting-source-code-programmatically-with-jdt –

ответ

1

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

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

1

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

0

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

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

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

Смежные вопросы