Home > 梅原 > ASDocのよくある記述ミス4個+1個

ASDocのよくある記述ミス4個+1個

20111216
Category:梅原 /Tags:

ASDoc便利ですよね。でも、いざ書き出す段になってよくわからないエラーで困ることもよくあります。「昨日までは問題なかったのに」、「swfファイルはちゃんと生成できているのに」なんてことも。
よくある記述ミス4個を紹介します。

なんで、4個かって言うと、さっき2時間つぶした3個と、おととい2時間つぶした1個だから!!
よくあるよくある!
忘れないように!

ダメな例

例えば、次のコードはコンパイルはできるのでswf生成は可能ですが、ASDocの生成はできません。
ちなみに、swc化もできません。Fat SWCだったからかも。

package jp.mztm {
	import jp.mztm.Foo;
	public class Boo {
		public function Boo() { };

		/**
		 * 兄弟の名前を返します。
		 * Vector.<String>なのでstringであることが保障されています。
		 * この値で次の例のようにクエリー生成をします。
		 * brother.php?name0=foo&name1=woo
		 * @return 兄弟の名前
		 */
		public function getBrother():Vector.<String> {
			return Vector.<String>(["foo","woo"]);
		}

	}
}

エラー1:使ってないimportはダメ!

エラー文:

E:\ASDocTest\src\jp\mztm\Boo.as(2): col: 16 エラー: 定義 jp.mztm:Foo が見つかりません。
import jp.mztm.Foo;
^

理由(推測だけど):
このクラスでjp.mztm.Fooを使ってないから。
実際にはこのクラスが存在していても、使わないクラスがimportされているとだめみたいです。

エラー2:@returnの後に全角スペースが入っちゃダメ!

エラー文:

[Fatal Error] toplevel.xml:51:8: エレメント型 “return” の後には、属性指定 “>” または “/>” が必要です。
org.xml.sax.SAXParseException: エレメント型 “return” の後には、属性指定 “>” または “/>” が必要です。
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at flex2.compiler.asdoc.AsDocHelper.createTopLevelClasses(AsDocHelper.java:66)
at flex2.compiler.asdoc.AsDocAPI.createTopLevelClassesXML(AsDocAPI.java:401)
at flex2.tools.ASDoc.asdoc(ASDoc.java:94)
at flex2.tools.ASDoc.main(ASDoc.java:35)
エラー: toplevel.xml を作成できませんでした : エレメント型 “return” の後には、属性指定 “>” または “/>” が必要です。

理由(推測だけど):
@returnの直後は半角スペースを置かないといけないみたい。
FlashDevelopだと、returnのところが彩度が高くなって目立つんだけどね。
コンパイルできるからって、見ない振りしちゃダメです。

エラー3:&は実体参照にすること!

エラー文:

[Fatal Error] :9:31: エンティティ “name1″ への参照の終了は、’;’ 区切り記号である必要があります。
適格な形式でないテキストが検出されました。詳細については、E:\ASDoc\validation_errors.log を参照してください。
Source file E:\ASDocTest\ASDoc\tempdita\packages.dita does not exist

理由(推測だけど):
ASDocはhtml化作業なので、実体参照にしないとだめみたい。

エラー4:<String>は実体参照にすること!

エラー文:

[Fatal Error] :7:6: エレメント型 “String” は対応する終了タグ “</String>” で終了する必要があります。
適格な形式でないテキストが検出されました。詳細については、E:\ASDocTest\ASDoc\validation_errors.log を参照してください。
Source file E:\ASDocTest\ASDoc\tempdita\packages.dita does not exist

理由(推測だけど):
ASDocはhtml化作業なので、実体参照にしないとだめみたい。
まあ、エラー3と同じ理由なんだけど、エラー文が違うので分けました。

改善例

そんなわけで、ASDocの生成が可能になるコードは次です。

package jp.mztm {
	//import jp.mztm.Foo;
	public class Boo {
		public function Boo() { };

		/**
		 * 兄弟の名前を返します。
		 * Vector.&lt;String&gt;なのでstringであることが保障されています。
		 * この値で次の例のようにクエリー生成をします。
		 * brother.php?name0=foo&amp;name1=woo
		 * @return 兄弟の名前
		 */
		public function getBrother():Vector.<String> {
			return Vector.<String>(["foo","woo"]);
		}

	}
}

そんなわけで、お疲れ様でした。

以下、2011/12/17追記
ダメな例

for (var i:int = 0; i < n; i++)
{
}

エラー5:比較演算子の<も実体参照にすること!

エラー文:

[Fatal Error] :53:27: エレメントの内容は、整形式の文字データまたはマークアップで構成する必要があります。
適格な形式でないテキストが検出されました。詳細については、E:\ASDocTest\ASDoc\validation_errors.log を参照してください。
Source file E:\ASDocTest\ASDoc\tempdita\packages.dita does not exist

理由(推測だけど):
ASDocはhtml化作業なので、実体参照にしないとだめみたい。
まあ、エラー3、4と同じ理由なんだけど、エラー文が違うので分けました。

for (var i:int = 0; i &lt; n; i++)
{
}

関連記事:

Comments are closed.