package org.etk.reflect.jlr.metadata; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Member; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.Type; import org.etk.reflect.api.metadata.AnnotationMetadata; import org.etk.reflect.api.metadata.FieldMetadata; import org.etk.reflect.api.metadata.MethodMetadata; import org.etk.reflect.api.metadata.ReflectionMetadata; import org.etk.reflect.api.metadata.TypeMetadata; import org.etk.reflect.core.AccessScope; public class JLReflectionMetadata implements ReflectionMetadata<Type, Method, Annotation, Method, Field> { public static JLReflectionMetadata newInstance() { return instance; } private final static JLReflectionMetadata instance = new JLReflectionMetadata(); private final JLReflectionTypeMetadata typeModel = new JLReflectionTypeMetadata(); /** . */ private final JLReflectionFieldMetadata fieldModel = new JLReflectionFieldMetadata(); /** . */ private final JLReflectionMethodMetadata methodModel = new JLReflectionMethodMetadata(); /** . */ private final JLReflectionTypeAnnotationMetadata typeAnnotationModel = new JLReflectionTypeAnnotationMetadata(); /** . */ private final JLReflectionFieldAnnotationMetadata fieldAnnotationModel = new JLReflectionFieldAnnotationMetadata(); /** . */ private final JLReflectionMethodAnnotationMetadata methodAnnotationModel = new JLReflectionMethodAnnotationMetadata(); public TypeMetadata<Type> getTypeModel() { return typeModel; } public FieldMetadata<Type, Field> getFieldModel() { return fieldModel; } public MethodMetadata<Type, Method> getMethodModel() { return methodModel; } public AnnotationMetadata<Type, Type, Annotation, Method> getTypeAnnotationMetadata() { return typeAnnotationModel; } public AnnotationMetadata<Type, Method, Annotation, Method> getMethodAnnotationMetadata() { return methodAnnotationModel; } public AnnotationMetadata<Type, Field, Annotation, Method> getFieldAnnotationMetadata() { return fieldAnnotationModel; } static AccessScope getAccess(Member member) { int modifiers = member.getModifiers(); if (Modifier.isPrivate(modifiers)) { return AccessScope.PRIVATE; } else if (Modifier.isPublic(modifiers)) { return AccessScope.PUBLIC; } else if (Modifier.isProtected(modifiers)) { return AccessScope.PROTECTED; } else { return AccessScope.PACKAGE_PROTECTED; } } }