// Path: autobundle-annotations/src/main/java/com/yatatsu/autobundle/AutoBundleConverter.java
// public interface AutoBundleConverter<Original, Stored> {
//     Stored convert(Original o);
//     Original original(Stored s);
// }


import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeName;
import com.yatatsu.autobundle.AutoBundleConverter;
import com.yatatsu.autobundle.AutoBundleField;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.MirroredTypeException;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
    boolean noCast() {
        return operationName.equals("ParcelableArrayList") ||
                operationName.equals("ParcelableArray") ||
                operationName.equals("SparseParcelableArray");
    }

    List<ClassName> getAnnotations() {
        return annotations;
    }

    boolean hasAnnotations() {
        return !annotations.isEmpty();
    }

    private static TypeName detectConvertedTypeByTypeElement(TypeElement element) {
        TypeMirror typeMirror = getConverterGenericsTypesByTypeElement(element).get(1);
        TypeName typeName = TypeName.get(typeMirror);
        try {
            typeName = typeName.unbox();
        } catch (UnsupportedOperationException ignore) {}
        return typeName;
    }

    private static List<? extends TypeMirror> getConverterGenericsTypesByTypeElement(TypeElement element) {
        TypeElement targetType = element;
        while (targetType != null) {
            if (!targetType.getInterfaces().isEmpty()) {
                for (TypeMirror in : targetType.getInterfaces()) {
                    DeclaredType inType = (DeclaredType) in;
                    if (inType.asElement().getSimpleName().toString()
// Path: autobundle-annotations/src/main/java/com/yatatsu/autobundle/AutoBundleConverter.java
// public interface AutoBundleConverter<Original, Stored> {
//     Stored convert(Original o);
//     Original original(Stored s);
// }


// Path: autobundle-processor/src/main/java/com/yatatsu/autobundle/processor/AutoBundleBindingField.java
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeName;
import com.yatatsu.autobundle.AutoBundleConverter;
import com.yatatsu.autobundle.AutoBundleField;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.MirroredTypeException;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;

    boolean noCast() {
        return operationName.equals("ParcelableArrayList") ||
                operationName.equals("ParcelableArray") ||
                operationName.equals("SparseParcelableArray");
    }

    List<ClassName> getAnnotations() {
        return annotations;
    }

    boolean hasAnnotations() {
        return !annotations.isEmpty();
    }

    private static TypeName detectConvertedTypeByTypeElement(TypeElement element) {
        TypeMirror typeMirror = getConverterGenericsTypesByTypeElement(element).get(1);
        TypeName typeName = TypeName.get(typeMirror);
        try {
            typeName = typeName.unbox();
        } catch (UnsupportedOperationException ignore) {}
        return typeName;
    }

    private static List<? extends TypeMirror> getConverterGenericsTypesByTypeElement(TypeElement element) {
        TypeElement targetType = element;
        while (targetType != null) {
            if (!targetType.getInterfaces().isEmpty()) {
                for (TypeMirror in : targetType.getInterfaces()) {
                    DeclaredType inType = (DeclaredType) in;
                    if (inType.asElement().getSimpleName().toString()
                            .equals(AutoBundleConverter.class.getSimpleName())) {