/* * Copyright (C) 2005 Joe Walnes. * Copyright (C) 2006, 2007, 2008, 2009, 2011, 2012, 2013, 2014 XStream Committers. * All rights reserved. * * The software in this package is published under the terms of the BSD * style license a copy of which has been included with this distribution in * the LICENSE.txt file. * * Created on 16. September 2005 by Mauro Talevi */ package com.thoughtworks.xstream.annotations; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.ConverterMatcher; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * Annotation to declare a converter. The annotation supports additionally the injection of * various constructor arguments provided by XStream: * *

* The algorithm will try the converter's constructor with the most arguments first. *

*

* Note, the annotation matches a {@link ConverterMatcher}. * {@link com.thoughtworks.xstream.converters.Converter} as well as * {@link com.thoughtworks.xstream.converters.SingleValueConverter} extend this interface. The * {@link com.thoughtworks.xstream.mapper.AnnotationMapper} can only handle these two * known types. *

* * @author Chung-Onn Cheong * @author Jörg Schaible */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD}) @Documented public @interface XStreamConverter { Class value(); int priority() default XStream.PRIORITY_NORMAL; /** * Flag to provide the current type as implicit first Class argument to a converter's * constructor. * * @return true if the current type is provided * @since 1.4.5 */ boolean useImplicitType() default true; /** * Provide class types as arguments for the converter's constructor arguments. *

* Note, that XStream itself provides the current class type as first Class argument to a * constructor, if the annotation is added directly to a class type (and not as part of a * parameter declaration of a {@link XStreamConverters} annotation). The current type has * precedence over any type provided with this method. This behavior can be overridden * setting {@link #useImplicitType()} to false. * * @return the types * @since 1.4.2 */ Class[] types() default {}; String[] strings() default {}; byte[] bytes() default {}; char[] chars() default {}; short[] shorts() default {}; int[] ints() default {}; long[] longs() default {}; float[] floats() default {}; double[] doubles() default {}; boolean[] booleans() default {}; }