vvakame/JsonPullParser — pull request #14 by backpaper0 (2012-08-27 14:13:49+00:00)
Title: 異なるパッケージのJsonModelを含むときにGenクラスに書き出されるFQDNが違っているバグを修正

タイトルが分かり難くて申し訳ありません。

例えば次のfoo.Aクラスは自分自身のパッケージfooとは異なるパッケージのbar.Bクラスのフィールドを持ちます。

```java
package foo;

import net.vvakame.util.jsonpullparser.annotation.JsonKey;
import net.vvakame.util.jsonpullparser.annotation.JsonModel;
import bar.B;

@JsonModel
public class A {

@JsonKey
private B b;

public B getB() {
return b;
}

public void setB(B b) {
this.b = b;
}

}
```

bar.Bは次のようなコードです。

```java
package bar;

import net.vvakame.util.jsonpullparser.annotation.JsonKey;
import net.vvakame.util.jsonpullparser.annotation.JsonModel;

@JsonModel
public class B {

@JsonKey
private String value;

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}
```

この場合に生成されるfoo.AGenクラスにおいてparseValueなどbar.BGenを参照する箇所で次のコードのようにクラスAのパッケージfooにBGenを足したfoo.BGenと書き出されてしまう問題がありました（実際に生成されているのはfoo.BGenではなくbar.BGen）。

```java
public static boolean parseValue(JsonPullParser parser, OnJsonObjectAddListener listener, String key, A obj) throws IOException, JsonFormatException {

if ("b".equals(key)) {

bar.B tmp = foo.BGen.get(parser, listener);
obj.setB(tmp);
```

この問題の原因はAptUtil#getPackageName(Elements, Element)で、このメソッドが「第二引数Elementが表す型のパッケージ」ではなく「Elementが所属しているクラスのパッケージ」を返すため上記のような動作をしていました。

解決策として、AptUtilにTypeMirrorを引数にとるgetPackageName(TypeMirror)を追加し、そちらを呼ぶようにしました。