问题
I'm using Emacs 23.2. Here's how I'm loading semantic:
(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)
So, if I create a simple java file and visit it, I get code completion for locally defined methods and classes. But I can't figure out how to make semantic aware of jdk libraries. For example, if I try semantic-ia-complete-symbol
on a String variable, I get Cannot find types for 'String blah'
.
Does anyone know how to load the jdk libraries into semanticdb so code completion of standard object types like String are available?
回答1:
Starting with CEDET 1.1, Semantic has support for retrieving class information through javap. You need to setup cedet-java-jdk-root
variable to JAVA_HOME, and populate semanticdb-javap-classpath
variable with list of paths to Java's system jars, like rt.jar
, etc.
There is an article (in Russian, but you can get translation) about setting Semantic up for Java completion - please look there for more details.
回答2:
If you unzip src.zip that is found in $JAVA_HOME you can add a hook for you java mode like this:
(add-hook 'java-mode-hook
'(lambda ()
(semantic-add-system-include (getenv "JAVA_HOME") 'java-mode)))
It solves the problem for me with Emacs 23.3 and CEDET 1.1.
回答3:
Haven't tried CEDET in a while, so I'll blindly ask a few questions that might give insight into your problem.
- I assume JDK is on your path, and Emacs can find it?
- Since JDK is basically a bunch of jar files without source code, can Semantic parse that? Example: if you make your own
Class1.java
, compile it toClass1.class
and then deleteClass1.java
, when you writeClass2.java
and reference some methods fromClass1
, can Semantic find them? - Have you tried JDEE?
来源:https://stackoverflow.com/questions/4173737/how-to-include-standard-jdk-library-in-emacs-semantic