com.fasterxml.jackson.datatype.hppc.HppcModule.java Source code

Java tutorial

Introduction

Here is the source code for com.fasterxml.jackson.datatype.hppc.HppcModule.java

Source

package com.fasterxml.jackson.datatype.hppc;

import java.lang.reflect.Type;

import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.type.*;

import com.carrotsearch.hppc.ObjectContainer;
import com.fasterxml.jackson.datatype.hppc.deser.HppcDeserializers;
import com.fasterxml.jackson.datatype.hppc.ser.*;

public class HppcModule extends SimpleModule {
    private static final long serialVersionUID = -6687678065284757885L;

    public HppcModule() {
        super("HppcDatatypeModule", ModuleVersion.instance.version());
    }

    @Override
    public void setupModule(SetupContext context) {
        super.setupModule(context);
        // must add a "type modifier", to recognize HPPC collection/map types
        context.addTypeModifier(new HppcTypeModifier());
        context.addDeserializers(new HppcDeserializers());
        context.addSerializers(new HppcSerializers());
    }

    /*
    /**********************************************************************
    /* Helper classes
    /**********************************************************************
     */

    /**
     * Ww need to ensure that parameterized ("generic") containers are
     * recognized as Collection-/Map-like types, so that associated annotations
     * are processed, and key/value types passed as expected.
     */
    static class HppcTypeModifier extends TypeModifier {
        @Override
        public JavaType modifyType(JavaType type, Type jdkType, TypeBindings bindings, TypeFactory typeFactory) {
            Class<?> raw = type.getRawClass();
            if (ObjectContainer.class.isAssignableFrom(raw)) {
                JavaType[] params = typeFactory.findTypeParameters(type, ObjectContainer.class);
                return typeFactory.constructCollectionLikeType(raw, params[0]);
            }
            return type;
        }
    }

}