Недавно вышедший Cedet
1.1 добавляет долгожданную поддержку
импорта символов из jar-ок. Теперь Emacs
предоставляет поддержку автодополнения
кода java примерно на том же уровне, что
и современные IDE.
Например, у нас есть
класс My1:
Он используется в My2:
Обратите внимание, как
flymake параллельно скомпилировал файл и
подсветил ошибки. Если набрать “my.” и
выполнить функцию semantic-ia-complete-symbol-menu (у
меня она замаплена на Ctrl-Space), то Emacs
выдаст такую подсказку:
Аналогично можно
запрашивать подсказку по членам системных
классов. Например, для StringBuilder:
Правда надо учитывать,
что, во-первых, импорты “звёздочкой”
не срабатывают, системных классов
semanticdb-javap тоже не знает. Поэтому, если
необходимы подсказки, то импорт классов
из неймспейса java.lang нужно делать явно,
как в моем примере.
Для того, чтобы заработали
показанные выше механизмы, необходимо
следующее:
- установленный пакет flymake;
- установленный пакет auto-complete;
- скачанный CEDET 1.1;
- Ну и конечно же, последний Emacs и java.
Конфигурация CEDET в
.emacs :
(load-file "~/cedet/common/cedet.el")
;; Подгрузить cedet
(global-semanticdb-minor-mode 1) ;;
Инициализировать semanticdb
;; Загрузить поддержку авто-дополнения
(semantic-load-enable-gaudy-code-helpers)
(custom-set-variables ;;
Инициализация переменных, указывающих,
где
;; установлена java
. . .
'(cedet-java-jdk-root "/opt/jdk")
;; Сюда нужно
добавить все jar-ки, из
;; которых
необходимо импортировать символы
'(semanticdb-javap-classpath
'("/opt/jdk/jre/lib/rt.jar"))
. . .
)
Конфигурация flymake:
(require 'flymake)
(add-hook 'java-mode-hook
'flymake-mode-on)
(defun my-java-flymake-init ()
(list "javac" (list
(flymake-init-create-temp-buffer-copy
'flymake-create-temp-with-folder-structure))))
(add-to-list
'flymake-allowed-file-name-masks '("\\.java$"
my-java-flymake-init flymake-simple-cleanup))
Конфигурация auto-complete:
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories
"~/.emacs.d/ac-dict")
(ac-config-default)
а конфигурация java-mode есть?
ОтветитьУдалитьЯ его не конфигурировал, все итак работает.
ОтветитьУдалитьА на ваш .emacs можно взглянуть? Я вижу у вас нет jde, зато есть jtags. И как вы делаете сборку проекта на java?
ОтветитьУдалитьЧестно говоря, сборку делаю не из emacs-а, в emacs я только код пишу. flymake умеет делать сборку на лету для подсветки ошибок -- вот и всё.
ОтветитьУдалитьПрикрутил. Теперь работает и cedet и jdee. А вот убунту у меня старая, flymake отсуствует :(
ОтветитьУдалитьflymake -- это emacs-пакет, можешь взять его с мармелада.
ОтветитьУдалитьЧто такое мармелад?
ОтветитьУдалитьhttp://marmalade-repo.org/
ОтветитьУдалитькруто! а ято думал, что у emacs'а с java будет все плохо еще лет 30)
ОтветитьУдалитьbtw, в текущей версии, cedet умеет дополнять встроенные классы и без явных импортов...
ОтветитьУдалитьEmacs 24.1, Cedet - текущий снапшот. Работает автодополнение только для методов классов локального проекта (не берет из rt.jar). Чтобы вы посоветовали?
ОтветитьУдалить