1 package com.lexicalscope.fluentreflection;
2
3 import java.lang.reflect.Field;
4 import java.lang.reflect.Method;
5
6 import com.google.inject.TypeLiteral;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 final class ReflectedTypeFactoryImpl implements ReflectedTypeFactory {
25 @Override public <T> FluentClass<T> reflect(final Class<T> klass) {
26 return reflect(TypeLiteral.get(klass));
27 }
28
29 @Override public <T> FluentClass<T> reflect(final TypeLiteral<T> typeLiteral) {
30 return new FluentClassImpl<T>(this, typeLiteral, new ReflectedMembersImpl<T>(this, typeLiteral));
31 }
32
33 @Override public <T> FluentObject<T> reflect(final Class<T> klass, final T instance) {
34 return reflect(TypeLiteral.get(klass), instance);
35 }
36
37 @Override public <T> FluentObject<T> reflect(final TypeLiteral<T> klass, final T instance) {
38 return new FluentObjectImpl<T>(this, reflect(klass), instance);
39 }
40
41 @Override public FluentMethod method(final Method method) {
42 return method(TypeLiteral.get(method.getDeclaringClass()), method);
43 }
44
45 @Override public FluentMethod method(final TypeLiteral<?> klass, final Method method) {
46 return new FluentMethodImpl(this, reflect(klass), klass, method);
47 }
48
49 public FluentMethod method(final Method method, final Object instance) {
50 return new BoundFluentMethodImpl(this, method(method), instance);
51 }
52
53 @Override public FluentField field(final TypeLiteral<?> klass, final Field field) {
54 return new FluentFieldImpl(this, reflect(klass), klass, field);
55 }
56 }