/**
  * @param document
  * @param offset
  * @return
  */
 private String computePrefix(EmbeddedDocument document, int offset) {
   final TextPosition textPosition = document.getPositionFromIndex(offset);
   final String line = document.getLineContent(textPosition.getLine());
   final LinearRange lineRange = document.getLinearRangeForLine(textPosition.getLine());
   String partLine = line.substring(0, offset - lineRange.getStartOffset());
   for (int i = partLine.length() - 1; i >= 0; i--) {
     switch (partLine.charAt(i)) {
       case '.':
         break;
       case ' ':
       case '(':
       case ')':
       case '{':
       case '}':
       case ';':
       case '[':
       case ']':
       case '"':
       case '\'':
         return partLine.substring(i + 1);
       default:
         break;
     }
   }
   return partLine;
 }
  private void updateContent() {
    /* -save current cursor and (ideally) viewport
     * -set editor content which is also expected to
     *     -reset dirty flag
     *     -clear history
     * -restore current cursor position
     */
    final TextPosition currentCursor = getCursorPosition();
    this.documentStorage.getDocument(
        document.getFile(),
        new EmbeddedDocumentCallback() {

          @Override
          public void onDocumentReceived(final String content) {
            editorWidget.setValue(content);
            document.setCursorPosition(currentCursor);
          }

          @Override
          public void onDocumentLoadFailure(final Throwable caught) {
            displayErrorPanel(constant.editorFileErrorMessage());
          }
        });
  }
 /**
  * @param document
  * @param offset
  * @return
  */
 private String computeTemplatePrefix(EmbeddedDocument document, int offset) {
   final TextPosition textPosition = document.getPositionFromIndex(offset);
   final String line = document.getLineContent(textPosition.getLine());
   final LinearRange lineRange = document.getLinearRangeForLine(textPosition.getLine());
   return line.substring(0, offset - lineRange.getStartOffset());
 }