デバッグメモ

  • 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!
	}
}