Как включить стандартную библиотеку jdk в семантику emacs?
Я использую Emacs 23.2. Вот как я загружаю семантику:
(setq semantic-default-submodes '(global-semantic-idle-scheduler-mode
global-semanticdb-minor-mode
global-semantic-idle-summary-mode
global-semantic-mru-bookmark-mode))
(semantic-mode 1)
Поэтому, если я создаю простой файл Java и посещаю его, я получаю завершение кода для локально определенных методов и классов. Но я не могу понять, как сделать семантическую осведомленность о библиотеках JDK. Например, если я попробую semantic-ia-complete-symbol
на строковую переменную, я получаю Cannot find types for 'String blah'
,
Кто-нибудь знает, как загрузить библиотеки jdk в semanticdb, чтобы было доступно завершение кода стандартных типов объектов, таких как String?
3 ответа
Начиная с CEDET 1.1, Semantic имеет поддержку для извлечения информации о классе через javap. Вам нужно настроить cedet-java-jdk-root
переменная в JAVA_HOME, и заполнить semanticdb-javap-classpath
переменная со списком путей к системным банкам Java, например rt.jar
, так далее.
Есть статья (на русском языке, но вы можете получить перевод) о настройке Semantic для завершения Java - пожалуйста, посмотрите там для более подробной информации.
Если вы разархивируете src.zip, который находится в $JAVA_HOME, вы можете добавить хук для вашего режима java, например так:
(add-hook 'java-mode-hook
'(lambda ()
(semantic-add-system-include (getenv "JAVA_HOME") 'java-mode)))
Это решает проблему для меня с Emacs 23.3 и CEDET 1.1.
Я давно не пробовал CEDET, поэтому я слепо задам несколько вопросов, которые могут дать представление о вашей проблеме.
- Я полагаю, JDK на вашем пути, и Emacs может его найти?
- Поскольку JDK в основном представляет собой набор файлов JAR без исходного кода, может ли семантический анализ это сделать? Пример: если вы делаете свой собственный
Class1.java
скомпилируйте это вClass1.class
а затем удалитьClass1.java
когда пишешьClass2.java
и ссылаться на некоторые методы изClass1
может Semantic их найти? - Вы пробовали JDEE?