diff --git a/src/main/java/net/vidageek/mirror/DefaultAccessorsController.java b/src/main/java/net/vidageek/mirror/DefaultAccessorsController.java index 89b417c..b0f5276 100644 --- a/src/main/java/net/vidageek/mirror/DefaultAccessorsController.java +++ b/src/main/java/net/vidageek/mirror/DefaultAccessorsController.java @@ -9,6 +9,7 @@ import net.vidageek.mirror.invoke.DefaultInvocationHandler; import net.vidageek.mirror.invoke.dsl.InvocationHandler; import net.vidageek.mirror.provider.ReflectionProvider; +import net.vidageek.mirror.reflect.DefaultTypeHandler; import net.vidageek.mirror.set.DefaultSetterHandler; import net.vidageek.mirror.set.dsl.SetterHandler; @@ -19,9 +20,9 @@ */ public final class DefaultAccessorsController implements AccessorsController { - private final Object target; + private final Object target; - private final ReflectionProvider provider; + private final ReflectionProvider provider; public DefaultAccessorsController(final ReflectionProvider provider, final Object target) { if (target == null) { @@ -42,4 +43,12 @@ public SetterHandler set() { public GetterHandler get() { return new DefaultGetterHandler(provider, target); } -} + + public boolean isCollection() { + return new DefaultTypeHandler(target.getClass()).isCollection(); + } + + public boolean isPrimitive() { + return new DefaultTypeHandler(target.getClass()).isPrimitive(); + } +} \ No newline at end of file diff --git a/src/main/java/net/vidageek/mirror/DefaultClassController.java b/src/main/java/net/vidageek/mirror/DefaultClassController.java index 8a758a5..98c8030 100644 --- a/src/main/java/net/vidageek/mirror/DefaultClassController.java +++ b/src/main/java/net/vidageek/mirror/DefaultClassController.java @@ -11,6 +11,7 @@ import net.vidageek.mirror.provider.ReflectionProvider; import net.vidageek.mirror.reflect.DefaultAllReflectionHandler; import net.vidageek.mirror.reflect.DefaultReflectionHandler; +import net.vidageek.mirror.reflect.DefaultTypeHandler; import net.vidageek.mirror.reflect.dsl.AllReflectionHandler; import net.vidageek.mirror.reflect.dsl.ReflectionHandler; import net.vidageek.mirror.set.DefaultSetterHandler; @@ -23,9 +24,9 @@ */ public final class DefaultClassController implements ClassController { - private final Class clazz; + private final Class clazz; - private final ReflectionProvider provider; + private final ReflectionProvider provider; public DefaultClassController(final ReflectionProvider provider, final Class clazz) { this.provider = provider; @@ -55,4 +56,11 @@ public AllReflectionHandler reflectAll() { return new DefaultAllReflectionHandler(provider, clazz); } -} + public boolean isCollection() { + return new DefaultTypeHandler(clazz).isCollection(); + } + + public boolean isPrimitive() { + return new DefaultTypeHandler(clazz).isPrimitive(); + } +} \ No newline at end of file diff --git a/src/main/java/net/vidageek/mirror/dsl/AccessorsController.java b/src/main/java/net/vidageek/mirror/dsl/AccessorsController.java index 04908be..51d1809 100644 --- a/src/main/java/net/vidageek/mirror/dsl/AccessorsController.java +++ b/src/main/java/net/vidageek/mirror/dsl/AccessorsController.java @@ -32,4 +32,18 @@ public interface AccessorsController { */ public GetterHandler get(); -} + /** + * This part of the DSL verifies if the class is a collection. + * + * @return true if reflected class is a collection. + */ + public boolean isCollection(); + + /** + * This part of the DSL verifies if the class is a primitive. + * + * @return true if reflected class is a primitive. + */ + public boolean isPrimitive(); + +} \ No newline at end of file diff --git a/src/main/java/net/vidageek/mirror/dsl/ClassController.java b/src/main/java/net/vidageek/mirror/dsl/ClassController.java index 9004c1a..ead8510 100644 --- a/src/main/java/net/vidageek/mirror/dsl/ClassController.java +++ b/src/main/java/net/vidageek/mirror/dsl/ClassController.java @@ -47,4 +47,17 @@ public interface ClassController { */ public AllReflectionHandler reflectAll(); -} + /** + * This part of the DSL verifies if the class is a collection. + * + * @return true if reflected class is a collection. + */ + public boolean isCollection(); + + /** + * This part of the DSL verifies if the class is a primitive. + * + * @return true if reflected class is a primitive. + */ + public boolean isPrimitive(); +} \ No newline at end of file diff --git a/src/main/java/net/vidageek/mirror/reflect/DefaultTypeHandler.java b/src/main/java/net/vidageek/mirror/reflect/DefaultTypeHandler.java new file mode 100644 index 0000000..4b7f68a --- /dev/null +++ b/src/main/java/net/vidageek/mirror/reflect/DefaultTypeHandler.java @@ -0,0 +1,41 @@ +package net.vidageek.mirror.reflect; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.Calendar; +import java.util.Collection; +import java.util.Date; +import java.util.Map; + +import net.vidageek.mirror.reflect.dsl.TypeHandler; + +public class DefaultTypeHandler implements TypeHandler { + + private Class clazz; + + public DefaultTypeHandler(Class clazz) { + this.clazz = clazz; + } + + public boolean isCollection() { + Type type = clazz; + if (type instanceof ParameterizedType) { + ParameterizedType ptype = (ParameterizedType) type; + return Collection.class.isAssignableFrom((Class) ptype.getRawType()) + || Map.class.isAssignableFrom((Class) ptype.getRawType()); + } + + return Collection.class.isAssignableFrom((Class) type); + } + + public boolean isPrimitive() { + return clazz.isPrimitive() + || clazz.isEnum() + || Number.class.isAssignableFrom(clazz) + || clazz.equals(String.class) + || Date.class.isAssignableFrom(clazz) + || Calendar.class.isAssignableFrom(clazz) + || Boolean.class.equals(clazz) + || Character.class.equals(clazz); + } +} \ No newline at end of file diff --git a/src/main/java/net/vidageek/mirror/reflect/dsl/TypeHandler.java b/src/main/java/net/vidageek/mirror/reflect/dsl/TypeHandler.java new file mode 100644 index 0000000..4756d4b --- /dev/null +++ b/src/main/java/net/vidageek/mirror/reflect/dsl/TypeHandler.java @@ -0,0 +1,7 @@ +package net.vidageek.mirror.reflect.dsl; + +public interface TypeHandler { + public boolean isCollection(); + + public boolean isPrimitive(); +} \ No newline at end of file diff --git a/src/test/java/net/vidageek/mirror/dsl/MirrorTest.java b/src/test/java/net/vidageek/mirror/dsl/MirrorTest.java index e78de80..020573a 100644 --- a/src/test/java/net/vidageek/mirror/dsl/MirrorTest.java +++ b/src/test/java/net/vidageek/mirror/dsl/MirrorTest.java @@ -93,7 +93,7 @@ public Object intercepts(final Object target, final Method method, final Object. @Test public void testThatProxifyMoreThanOneInterfaceIsCorrect() { Object proxy = new Mirror().proxify(OneClassFixture.class, OneInterfaceFixture.class, - OtherInterfaceFixture.class).interceptingWith(new MethodInterceptor() { + OtherInterfaceFixture.class).interceptingWith(new MethodInterceptor() { public boolean accepts(final Method method) { return true; @@ -108,4 +108,4 @@ public Object intercepts(final Object target, final Method method, final Object. assertEquals("foo", ((OtherInterfaceFixture) proxy).otherInterfaceMethod()); assertEquals("foo", ((OneClassFixture) proxy).classMethod()); } -} +} \ No newline at end of file diff --git a/src/test/java/net/vidageek/mirror/reflect/TypeHandlerTest.java b/src/test/java/net/vidageek/mirror/reflect/TypeHandlerTest.java new file mode 100644 index 0000000..519c7d5 --- /dev/null +++ b/src/test/java/net/vidageek/mirror/reflect/TypeHandlerTest.java @@ -0,0 +1,23 @@ +package net.vidageek.mirror.reflect; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Test; + +public class TypeHandlerTest { + + @Test + public void testThatReflectClassIsACollection() { + assertTrue(new DefaultTypeHandler(ArrayList.class).isCollection()); + assertFalse(new DefaultTypeHandler(Integer.class).isCollection()); + } + + @Test + public void testThatReflectClassIsAPrimitive() { + assertTrue(new DefaultTypeHandler(Integer.class).isPrimitive()); + assertFalse(new DefaultTypeHandler(ArrayList.class).isPrimitive()); + } +} \ No newline at end of file