package com.redhat.ceylon.model.loader.impl.reflect.mirror;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Map;
import com.redhat.ceylon.model.loader.mirror.AnnotationMirror;
import com.redhat.ceylon.model.loader.mirror.FieldMirror;
import com.redhat.ceylon.model.loader.mirror.TypeMirror;
public class ReflectionField implements FieldMirror {
private Field field;
private ReflectionType type;
private Map<String, AnnotationMirror> annotations;
public ReflectionField(Field field) {
this.field = field;
}
@Override
public AnnotationMirror getAnnotation(String type) {
return getAnnotations().get(type);
}
private Map<String, AnnotationMirror> getAnnotations() {
// profiling revealed we need to cache this
if(annotations == null){
annotations = ReflectionUtils.getAnnotations(field);
}
return annotations;
}
@Override
public String getName() {
return field.getName();
}
@Override
public boolean isStatic() {
return Modifier.isStatic(field.getModifiers());
}
@Override
public boolean isPublic() {
return Modifier.isPublic(field.getModifiers());
}
@Override
public boolean isProtected() {
return Modifier.isProtected(field.getModifiers());
}
@Override
public boolean isDefaultAccess() {
return !Modifier.isPrivate(field.getModifiers())
&& !Modifier.isPublic(field.getModifiers())
&& !Modifier.isProtected(field.getModifiers());
}
@Override
public boolean isFinal() {
return Modifier.isFinal(field.getModifiers());
}
@Override
public TypeMirror getType() {
if(type != null)
return type;
type = new ReflectionType(field.getGenericType());
return type;
}
@Override
public String toString() {
return "[ReflectionField: "+field.toString()+"]";
}
}