org.codehaus.jackson.map.introspect.AnnotationMap Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jackson-mapper-asl Show documentation
Show all versions of jackson-mapper-asl Show documentation
Data Mapper package is a high-performance data binding package
built on Jackson JSON processor
package org.codehaus.jackson.map.introspect;
import java.lang.annotation.Annotation;
import java.util.*;
import org.codehaus.jackson.map.util.Annotations;
/**
* Simple helper class used to keep track of collection of
* Jackson Annotations associated with annotatable things
* (methods, constructors, classes).
* Note that only Jackson-owned annotations are tracked (for now?).
*/
public final class AnnotationMap implements Annotations
{
protected HashMap,Annotation> _annotations;
public AnnotationMap() { }
private AnnotationMap(HashMap,Annotation> a) {
_annotations = a;
}
@SuppressWarnings("unchecked")
@Override
public A get(Class cls)
{
if (_annotations == null) {
return null;
}
return (A) _annotations.get(cls);
}
public static AnnotationMap merge(AnnotationMap primary, AnnotationMap secondary)
{
if (primary == null || primary._annotations == null || primary._annotations.isEmpty()) {
return secondary;
}
if (secondary == null || secondary._annotations == null || secondary._annotations.isEmpty()) {
return primary;
}
HashMap,Annotation> annotations
= new HashMap,Annotation>();
// add secondary ones first
for (Annotation ann : secondary._annotations.values()) {
annotations.put(ann.annotationType(), ann);
}
// to be overridden by primary ones
for (Annotation ann : primary._annotations.values()) {
annotations.put(ann.annotationType(), ann);
}
return new AnnotationMap(annotations);
}
@Override
public int size() {
return (_annotations == null) ? 0 : _annotations.size();
}
/**
* Method called to add specified annotation in the Map, but
* only if it didn't yet exist.
*/
public void addIfNotPresent(Annotation ann)
{
if (_annotations == null || !_annotations.containsKey(ann.annotationType())) {
_add(ann);
}
}
/**
* Method called to add specified annotation in the Map.
*/
public void add(Annotation ann) {
_add(ann);
}
@Override
public String toString()
{
if (_annotations == null) {
return "[null]";
}
return _annotations.toString();
}
/*
/**********************************************************
/* Helper methods
/**********************************************************
*/
protected final void _add(Annotation ann)
{
if (_annotations == null) {
_annotations = new HashMap,Annotation>();
}
_annotations.put(ann.annotationType(), ann);
}
}