com.fasterxml.classmate.AnnotationConfiguration Maven / Gradle / Ivy
Show all versions of classmate Show documentation
package com.fasterxml.classmate;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.util.*;
import com.fasterxml.classmate.util.ClassKey;
/**
* Interface for object that determines handling of annotations in regards
* to inheritance, overrides.
*/
@SuppressWarnings("serial")
public abstract class AnnotationConfiguration implements Serializable
{
/**
* Method called to figure out how to handle instances of specified annotation
* type when used as class annotation.
*/
public abstract AnnotationInclusion getInclusionForClass(Class extends Annotation> annotationType);
/**
* Method called to figure out how to handle instances of specified annotation
* type when used as constructor annotation.
*
* Note that constructor annotations can never be inherited so this just determines
* between inclusion or non-inclusion.
*/
public abstract AnnotationInclusion getInclusionForConstructor(Class extends Annotation> annotationType);
/**
* Method called to figure out how to handle instances of specified annotation
* type when used as field annotation.
*
* Note that field annotations can never be inherited so this just determines
* between inclusion or non-inclusion.
*/
public abstract AnnotationInclusion getInclusionForField(Class extends Annotation> annotationType);
/**
* Method called to figure out how to handle instances of specified annotation
* type when used as method annotation.
*
* Note that method annotations can be inherited for member methods, but not for static
* methods; for static methods thereby this just determines between inclusion and
* non-inclusion.
*/
public abstract AnnotationInclusion getInclusionForMethod(Class extends Annotation> annotationType);
/**
* Method called to figure out how to handle instances of specified annotation
* type when used as parameter annotation.
*
* Note that parameter annotations can be inherited for member methods, but not for static
* methods; for static methods thereby this just determines between inclusion and
* non-inclusion.
*/
public abstract AnnotationInclusion getInclusionForParameter(Class extends Annotation> annotationType);
/**
* Simple implementation that can be configured with default behavior
* for unknown annotations, as well as explicit behaviors for
* enumerated annotation types. Same default is used for both class and
* member method annotations (constructor, field and static method
* annotations are never inherited)
*/
public static class StdConfiguration extends AnnotationConfiguration implements Serializable
{
protected final AnnotationInclusion _defaultInclusion;
protected final HashMap _inclusions = new HashMap();
public StdConfiguration(AnnotationInclusion defaultBehavior)
{
_defaultInclusion = defaultBehavior;
}
@Override
public AnnotationInclusion getInclusionForClass(Class extends Annotation> annotationType) {
return _inclusionFor(annotationType);
}
@Override
public AnnotationInclusion getInclusionForConstructor(Class extends Annotation> annotationType) {
return _inclusionFor(annotationType);
}
@Override
public AnnotationInclusion getInclusionForField(Class extends Annotation> annotationType) {
return getInclusionForClass(annotationType);
}
@Override
public AnnotationInclusion getInclusionForMethod(Class extends Annotation> annotationType) {
return getInclusionForClass(annotationType);
}
@Override
public AnnotationInclusion getInclusionForParameter(Class extends Annotation> annotationType) {
return getInclusionForClass(annotationType);
}
public void setInclusion(Class extends Annotation> annotationType, AnnotationInclusion incl)
{
_inclusions.put(new ClassKey(annotationType), incl);
}
protected AnnotationInclusion _inclusionFor(Class extends Annotation> annotationType)
{
ClassKey key = new ClassKey(annotationType);
AnnotationInclusion beh = _inclusions.get(key);
return (beh == null) ? _defaultInclusion : beh;
}
}
}