class EruptModel implements Cloneable {

    private transient Class<?> clazz;

    private transient Erupt erupt;

    private transient AnnotationProxy<Erupt, Void> eruptAnnotationProxy = new EruptProxy();

    private transient Map<String, EruptFieldModel> eruptFieldMap;

    private transient boolean i18n;

    private String eruptName;

    private JsonObject eruptJson;

    private List<EruptFieldModel> eruptFieldModels;

    //默认查询条件
    private Map<String, Object> searchCondition;

    private boolean extraRow = false;

    public EruptModel(Class<?> eruptClazz) {
        this.clazz = eruptClazz;
        this.erupt = eruptClazz.getAnnotation(Erupt.class);
        this.erupt = eruptAnnotationProxy.newProxy(this.getErupt());
        this.eruptName = eruptClazz.getSimpleName();
        this.i18n = null != clazz.getAnnotation(EruptI18n.class);
        DataProxyInvoke.invoke(this, it -> {
            try {
                it.getClass().getDeclaredMethod("extraRow", List.class);
                this.extraRow = true;
            } catch (NoSuchMethodException ignored) {
            }
        });
    }

    public Erupt getErupt() {
        ProxyContext.set(clazz);
        return erupt;
    }

    @Override
    public EruptModel clone() throws CloneNotSupportedException {<FILL_FUNCTION_BODY>}

}

        EruptModel eruptModel = (EruptModel) super.clone();
        eruptModel.eruptJson = AnnotationProcess.annotationToJsonByReflect(this.getErupt());
        eruptModel.eruptFieldModels = eruptFieldModels.stream().map(CloneSupport::clone)
                .peek(EruptFieldModel::serializable).collect(Collectors.toList());
        return eruptModel;
    
<no_super_class>