2010-11-13 1 views
6

Я использую Emacs 23.2. Вот как я загружаю семантическим:Как включить стандартную библиотеку jdk в семантику emacs?

(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 по переменной String, я получаю Cannot find types for 'String blah'.

Кто-нибудь знает, как загрузить библиотеки jdk в semanticdb, чтобы получить завершение кода стандартных типов объектов, таких как String?

ответ

0

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

  1. Я предполагаю, что JDK находится на вашем пути, и Emacs может его найти?
  2. Поскольку JDK - это в основном куча файлов jar без исходного кода, может ли семантический анализ этого? Пример: если вы сделаете свой собственный Class1.java, скомпилируйте его до Class1.class, а затем удалите Class1.java, когда вы напишете Class2.java и воспользуйтесь некоторыми методами от Class1, можете ли Semantic найти их?
  3. Вы пробовали JDEE?
+0

Да, jdk на моем пути. Я нашел src.jar внутри os x jdk и даже попытался извлечь и посетить String.java. Кажется, семантический анализ String.java в semanticdb, но когда я вернусь в свой собственный проект java, он не может найти методы для строк. Я посмотрел на JDEE, но моя цель здесь - понять семантику сначала, прежде чем добавить больше сложности. Я думаю, что это в основном мое незнание того, как работает семантика, поэтому я буду продолжать рыть, но спасибо за ваш ответ! – Upgradingdave

1

Если распаковать 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.

3

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

Существует an article (на русском языке, но вы можете получить translation) о создании семантическога для Java завершение - смотрите, пожалуйста, подробнее.

Смежные вопросы