ac-dabbrev.el ですげぇこと思いついた。

はい,オチからいいます。
全然すごいこと思いついてません。

dabbrev スキャン対象バッファに dired-mode バッファを入れてみる。

なぜ?
ファイル名の補完をして欲しかったから。
java の場合はファイル名=クラス名みたいなところあるからというのと,
初めてクラス名書く時,あったら便利かなぁと。
jde-gen-class 系使えば,問題ないですね。わかります。
IDE 使えばもっと問題ないですね。わかります。
ごむぇん,にいちゃん。

(defun my-dabbrev-select-jde-mode-buffers ()
  "Return a list of buffers opened with jde-mode or java-mode."
  (let (l (bl (buffer-list)))
    (dolist (elt bl)
      (save-excursion
        (set-buffer elt)
        ;; dired-mode を足してみた。
        (when (memq major-mode '(java-mode jde-mode dired-mode))
          (add-to-list 'l elt))))
    l))

(defun my-jde-mode-hook-func ()
  ;; 長いので省略
  (set (make-local-variable 'dabbrev-check-all-buffers) nil)
  (set (make-local-variable 'dabbrev-select-buffers-function)
       'my-dabbrev-select-jde-mode-buffers))

ac-dabbrev.el でスキャン結果を保存しておくのはどうだろうか?

毎回毎回対象バッファを眺めるのは,多くの場合,同じ事の繰り返しになるので,
エコ的に考えると大変なのでは?
というか,minibuffer に Scanning foo.el... みたいなんがパラパラ漫画みたいにでるのが,
うっとおしいだけだったりする。

さて。
スキャン対象バッファの集合{b1, b2, b3}があって,今,b2 を編集中だとする。
b2 で,補完一発目の際に,集合のすべてのバッファを対象にをスキャンして結果を保持。
b2 で,2度目以降,補完する際は,b2 だけをスキャンすればいいんじゃね?
スキャンした結果は更新しておく。
b1 に移って,一発目の補完については,キャッシュから引っ張ってくればよい。
あとは,同じ。
オレにしては賢いんじゃね?
あぁ,でも,すでに,dabbrev--find-expansion とかで実装されてそうですね。わかります。