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
;;
;;; Code:

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

;; Seems I have to demand load this or it's not availble when
;; opening a java file.
;; 2018-07-18: switch to defer with timeout instead of demand
(use-package lsp-java
  :defer 3
  :init  
  (progn
    (require 'lsp-ui-flycheck)
    (require 'lsp-ui-sideline)
    (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))
  
  :config
  ;; this is a bummer, having to add each project individually :-(
  (setq lsp-java--workspace-folders
	(list
	 (expand-file-name "~/Projects/CopperheadRecovery/copperhead"))))

(use-package 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
  :init
  (add-to-list 'company-backends #'company-lsp)

  :config
  (setq company-lsp-enable-snippet t
       company-lsp-cache-candidates t))

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