Как включить стандартную библиотеку 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?


person Upgradingdave    schedule 13.11.2010    source источник


Ответы (3)


Начиная с CEDET 1.1, Semantic поддерживает получение информации о классе через javap. Вам нужно настроить переменную cedet-java-jdk-root на JAVA_HOME и заполнить переменную semanticdb-javap-classpath списком путей к системным jar-файлам Java, например rt.jar и т. д.

Есть статья (на русском, но вы можете получить translation) о настройке Semantic для автодополнения Java — дополнительные сведения см. здесь.

person Alex Ott    schedule 09.05.2012

Если вы разархивируете 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.

person Kjell Andreassen    schedule 08.05.2012

Давненько не пробовал CEDET, поэтому вслепую задам несколько вопросов, которые могут дать представление о вашей проблеме.

  1. Я предполагаю, что JDK находится на вашем пути, и Emacs может его найти?
  2. Поскольку JDK — это, по сути, набор JAR-файлов без исходного кода, может ли Semantic это проанализировать? Пример: если вы создадите свой собственный Class1.java, скомпилируете его в Class1.class, а затем удалите Class1.java, когда вы напишете Class2.java и сошлетесь на некоторые методы из Class1, сможет ли Semantic найти их?
  3. Пробовали ли вы JDEE?
person darioo    schedule 16.11.2010
comment
Да, JDK на моем пути. Я нашел src.jar внутри os x jdk и даже попытался извлечь и посетить String.java. Кажется, семантический анализ String.java в semanticdb, но когда я возвращаюсь в свой собственный проект Java, он не может найти методы для строк. Я просмотрел JDEE, но моя цель здесь - сначала понять семантику, прежде чем добавлять больше сложности. Я думаю, что это в основном мое незнание того, как работает семантика, поэтому я продолжу копать, но спасибо за ваш ответ! - person Upgradingdave; 17.11.2010