vvakame/JsonPullParser

モデルの基底クラスがJsonModelで注釈された内部クラスの場合に不正なクラスが生成される

esmasui opened this issue · 0 comments

現象再現用のクラス

package com.example.model;

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

public class InnerClassInheritance {

    @JsonModel
    public static class TheParentClass {
        @JsonKey
        private boolean parentProperty;

        public boolean isParentProperty() {
            return parentProperty;
        }

        public void setParentProperty(boolean parentProperty) {
            this.parentProperty = parentProperty;
        }
    }

    @JsonModel
    public static class TheSubClass extends TheParentClass {
        @JsonKey
        private boolean subProperty;

        public boolean isSubProperty() {
            return subProperty;
        }

        public void setSubProperty(boolean subProperty) {
            this.subProperty = subProperty;
        }
    }
}

基底クラスのメタクラス TheParentClassGen.javacom.example.model パッケージに生成されており、FQCNは com.example.model.TheParentClassGen である。
しかし生成されたサブクラスのメタクラス TheSubClassGen からは com.example.model.InnerClassInheritance.TheParentClassGen として参照されている。
このためコンパイラは参照を解決できずビルドエラーとなる。

TheSubClassGen.javaの一部

    public static boolean parseValue(JsonPullParser parser, OnJsonObjectAddListener listener, String key, InnerClassInheritance.TheSubClass obj) throws IOException, JsonFormatException {

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

            parser.getEventType();
            obj.setSubProperty(parser.getValueBoolean());



        } else if(com.example.model.InnerClassInheritance.TheParentClassGen.parseValue(parser, listener, key, obj)) {
            return true;

        } else {
            return false;
        }
        return true;
    }