デバッグメモ
- HackCollector l.144
- @whenタグを拾ってる。
- ValueResolverがエラー吐きまくり。
- @link CtDeclaredTypeってなってると、CtDeclaredTypeがloadできねぇぞと怒る。コワヒ
- つまり、@linkの所に書くクラス名は、FQNで書かないとダメらしい。
- NamingContext#getDeclaredTypeが、ソースコードにあるimport文をどうやら考慮してくれないのかなぁ。
- NamingContextImpl#importsが空っぽだに。
ナニがおかしいのか分ったカモ。要は、NamingContextImplにaddされるimport文は、処理対象になるリソースから取ってるからオカシナ事になるんですな。Hackが書いてあるコードからimport文を抜かないといけないんだけど、そうなってない。マチガイ。 - HackEnvironment#getMethodでとったCtMethod#getCompilationUnitすると、nullが返ってきとるデスナ。ヲカシイのは、これだに。
- CtClassMaster#compilationUnitが、トップレベルタイプなのに、nullなのは変ですなぁ…。
- 又、HackCollector#registerに戻ってきたデス。
よく分らないけど、CtMethodMasterからCtClassMasterに辿り着けないんじゃないか…とか。マチガイ。 - 引数に入ってくるCtClassMasterには確かにCompilationUnitに対する参照がちゃんと格納されているのに、後で取れないってオカシイ様な。
- 結局の所、DeclarationFactoryImpl#loadTopLevelTypeで生成されたCtClassMasterに、CtCompilationUnitはセットされない。
- つまり、HackEnvironment#getMethodでやっている様に、LtInvocableDeclaration#accept経由で取ったCtMethodのparentとして生成されるCtClassMasterには、CtCompilationUnitが設定されていない。
- やぱしHackCollector#registerには違和感があるですなぁ…。折角、CompilationManagerで作ったCtCompilationUnitの参照がどっかに消えてしまうのは、何か違う様な…。
ちなみに、デバッグに使ってたHackはこんな感じ。
package aa.bb.cc.hacks; import org.ashikunep.irenka.dom.CtDeclaredType; import org.ashikunep.irenka.dom.CtReference; import org.ashikunep.irenka.toolkit.Messager; /** * Javadocコメントが書かれていないものを検出し、警告するプロセッサ。 * * @author Masataka Kurihara (Gluegent, Inc.) */ public class JavadocCheckProcessor { /** * publicな型、型メンバを検出する。 * * @param messager * エンジンが提供するログツール。 * @param self * Javadocを検査する要素 * @when public in self.modifiers self in ( {@link CtDeclaredType}, * {@link org.ashikunep.irenka.dom.CtField}, * {@link org.ashikunep.irenka.dom.CtConstructor}, * {@link org.ashikunep.irenka.dom.CtMethod}) */ public void checkMethod(Messager messager, CtReference self) { if (self.getJavadoc().exists() == false) { messager.warn(self, "JavaDocが書かれていません"); } } }
Hackの対象にしてたリソースはこんな感じ。
package aa.bb.cc; /* * {@link JavadocCheckProcessor} demo. */ public class DemoJavadoc { /** * main method (with Javadoc). * * @param args * ignored */ public static void main(String... args) { // javadoc exists } public static void missing() { // missing javadoc! } }