dotfiles / .emacs.d / personal / myjava.el

;;; MYJAVA --- java mode configuration
;;
;; Author: Jeff Bowman <jeff@CanisNubilus>
;; Copyright © 2018, Jeff Bowman, all rights reserved.
;; Created:  6 July 2018
;;
;;; Commentary:
;;
;; Use LSP for java mode. Mostly copied/inspired by github page:
;; https://github.com/emacs-lsp/lsp-java
;;
;; 6 July 2018:
;; N.B. Mostly doesn't work. Opening a Java file does not enable
;; the language server and lsp-* functions return an error stating
;; lsp server is not enabled for this file or similar. Manually loading
;; lsp-java and then calling lsp-java-enable works, so need to figure
;; how to make this code run automatically when java mode is started
;; -- guessing I need (:hook java) or similar in the lsp-java config.
;; 
;;; Code:

(use-package lsp-mode
  :hook java-mode)

(use-package java-snippets)

(use-package java-mode
  :ensure java-snippets
  :init
  (add-hook 'java-mode-hook #'yas-minor-mode))

(use-package lsp-ui
  :hook (lsp-mode . lsp-ui-mode)
  :config
  (setq lsp-ui-sideline-enable t
	lsp-ui-sideline-show-symbol t
	lsp-ui-sideline-show-hover t
	lsp-ui-sideline-showcode-actions t
	lsp-ui-sideline-update-mode 'point))

(use-package company-lsp
  :after company
  :config
  (add-hook 'java-mode-hook (lambda () (push 'company-lsp company-backends)))
  (seq company-lsp-enable-snippet t
       company-lsp-cache-candidates t)
  (push 'java-mode company-global-modes))

(use-package lsp-java
  :ensure lsp-mode
  :requires (lsp-ui-flycheck lsp-ui-sideline)
  :config  
  (add-hook 'java-mode-hook 'lsp-java-enable)
  (add-hook 'java-mode-hook 'flycheck-mode)
  (add-hook 'java-mode-hook 'company-mode)
  (add-hook 'java-mode-hook (lambda () (lsp-ui-flycheck-enable t)))
  (add-hook 'java-mode-hook 'lsp-ui-sideline-mode)
  
  ;; this is a bummer, having to add each project individually :-(
  (setq lsp-java--workspace-folders
	(list
	 (expand-file-name "~/Projects/CopperheadRecovery/copperhead"))))


(provide 'myjava)
;;; myjava.el ends here