2010-11-13 24 views
6

Tôi đang sử dụng Emacs 23.2. Dưới đây là cách tôi tải ngữ nghĩa:Làm thế nào để đưa thư viện jdk tiêu chuẩn vào emacs ngữ nghĩa?

(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) 

Vì vậy, nếu tôi tạo một tệp java đơn giản và truy cập, tôi sẽ hoàn tất mã cho các phương thức và lớp được xác định cục bộ. Nhưng tôi không thể tìm ra cách làm cho nhận thức ngữ nghĩa của các thư viện jdk. Ví dụ: nếu tôi thử semantic-ia-complete-symbol trên biến Chuỗi, tôi nhận được Cannot find types for 'String blah'.

Có ai biết cách tải các thư viện jdk vào semanticdb để mã hoàn thành các loại đối tượng tiêu chuẩn như String có sẵn không?

Trả lời

0

Chưa thử CEDET trong một thời gian, vì vậy tôi sẽ hỏi một vài câu hỏi có thể cung cấp thông tin chi tiết về vấn đề của bạn.

  1. Tôi giả định JDK đang trên đường dẫn của bạn và Emac có thể tìm thấy nó?
  2. Vì JDK về cơ bản là một loạt các tệp jar không có mã nguồn, có thể phân tích cú pháp ngữ nghĩa đó không? Ví dụ: nếu bạn tạo Class1.java của riêng mình, hãy biên dịch nó thành Class1.class và sau đó xóa Class1.java, khi bạn viết Class2.java và tham chiếu một số phương thức từ Class1, ngữ nghĩa có thể tìm thấy chúng không?
  3. Bạn đã thử JDEE chưa?
+0

Có, jdk đang trên đường dẫn của tôi. Tôi tìm thấy src.jar bên trong os x jdk và thậm chí đã thử giải nén và truy cập String.java. Dường như phân tích cú pháp ngữ nghĩa String.java thành semanticdb, nhưng khi tôi trở lại bên trong dự án java tùy chỉnh của tôi, nó dường như không thể tìm ra các phương thức cho Strings. Tôi đã xem xét JDEE, nhưng mục tiêu của tôi ở đây là hiểu ngữ nghĩa đầu tiên trước khi thêm phức tạp hơn. Tôi nghĩ rằng đó là chủ yếu là sự thiếu hiểu biết của tôi về cách thức hoạt động ngữ nghĩa, vì vậy tôi sẽ tiếp tục đào bới, nhưng cảm ơn phản hồi của bạn! – Upgradingdave

1

Nếu bạn giải nén src.zip được tìm thấy trong $ JAVA_HOME bạn có thể thêm một cái móc cho bạn chế độ java như thế này:

(add-hook 'java-mode-hook 
    '(lambda() 
    (semantic-add-system-include (getenv "JAVA_HOME") 'java-mode))) 

Nó giải quyết các vấn đề đối với tôi với Emacs 23,3 và Cedet 1.1.

3

Bắt đầu với CEDET 1.1, Semantic có hỗ trợ truy xuất thông tin lớp thông qua javap. Bạn cần phải thiết lập cedet-java-jdk-root biến JAVA_HOME, và cư semanticdb-javap-classpath biến với danh sách đường dẫn để lọ hệ thống Java, như rt.jar vv

an article (bằng tiếng Nga, nhưng bạn có thể nhận translation) về việc thiết Semantic lên cho Java hoàn thành - hãy xem ở đó để biết thêm chi tiết.

Các vấn đề liên quan