- "-p" (company-eclim--project-name)
- "-f" project-file))
- (setq company-eclim--doc
- (mapcar (lambda (line)
- (cdr (split-string line "|" nil)))
- (company-eclim--call-process
- "java_complete" "-p" (company-eclim--project-name)
- "-f" project-file
- "-o" (number-to-string (1- (point)))
- "-e" "utf-8"
- "-l" "standard"))))
- (let ((completion-ignore-case nil))
- (all-completions prefix (mapcar 'car company-eclim--doc))))
+ "-p" (company-eclim--project-name)
+ "-f" project-file))
+ (dolist (item (cdr (assoc 'completions
+ (company-eclim--call-process
+ "java_complete" "-p" (company-eclim--project-name)
+ "-f" project-file
+ "-o" (number-to-string
+ (company-eclim--search-point prefix))
+ "-e" "utf-8"
+ "-l" "standard"))))
+ (let* ((meta (cdr (assoc 'info item)))
+ (completion meta))
+ (when (string-match " ?[(:-]" completion)
+ (setq completion (substring completion 0 (match-beginning 0))))
+ (put-text-property 0 1 'meta meta completion)
+ (push completion completions)))
+ (let ((completion-ignore-case nil))
+ (all-completions prefix completions))))
+
+(defun company-eclim--search-point (prefix)
+ (if (or (cl-plusp (length prefix)) (eq (char-before) ?.))
+ (1- (point))
+ (point)))
+
+(defun company-eclim--meta (candidate)
+ (get-text-property 0 'meta candidate))
+
+(defun company-eclim--annotation (candidate)
+ (let ((meta (company-eclim--meta candidate)))
+ (when (string-match "\\(([^-]*\\) -" meta)
+ (substring meta (match-beginning 1) (match-end 1)))))
+
+(defun company-eclim--prefix ()
+ (let ((prefix (company-grab-symbol)))
+ (when prefix
+ ;; Completion candidates for annotations don't include '@'.
+ (when (eq ?@ (string-to-char prefix))
+ (setq prefix (substring prefix 1)))
+ prefix)))