diff --git a/README.md b/README.md index 721c422..7cd397d 100644 --- a/README.md +++ b/README.md @@ -17,4 +17,32 @@ Now working on capabilities that mimick java.lang.reflect * I do plan to substitute java.lang.reflect.Array, because of it's VERY poor performance * a read model for methods, fields etc * invocation capabilities - \ No newline at end of file + +```java +import com.github.shautvast.reflective.MetaClass; +import com.github.shautvast.reflective.Reflective; + +public class Main { + public static void main(String[] args) { + Dummy dummy = new Dummy(); + dummy.setName("foo"); + MetaClass metaDummy = Reflective.getMetaClass(dummy.getClass()); + + metaDummy.getMethod("setName") + .ifPresent(m -> m.invoke(dummy, "bar")); + System.out.println(dummy.getName()); // prints "bar" + } + + public static class Dummy { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } +} +``` \ No newline at end of file diff --git a/src/main/java/com/github/shautvast/reflective/Main.java b/src/main/java/com/github/shautvast/reflective/Main.java new file mode 100644 index 0000000..fbe19c5 --- /dev/null +++ b/src/main/java/com/github/shautvast/reflective/Main.java @@ -0,0 +1,28 @@ +package com.github.shautvast.reflective; + +import com.github.shautvast.reflective.MetaClass; +import com.github.shautvast.reflective.Reflective; + +public class Main { + public static void main(String[] args) { + Dummy dummy = new Dummy(); + dummy.setName("foo"); + MetaClass metaDummy = Reflective.getMetaClass(dummy.getClass()); + + metaDummy.getMethod("setName") + .ifPresent(m -> m.invoke(dummy, "bar")); + System.out.println(dummy.getName()); // prints "bar" + } + + public static class Dummy { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/github/shautvast/reflective/Reflective.java b/src/main/java/com/github/shautvast/reflective/Reflective.java index 4a72248..60c19f4 100644 --- a/src/main/java/com/github/shautvast/reflective/Reflective.java +++ b/src/main/java/com/github/shautvast/reflective/Reflective.java @@ -5,11 +5,7 @@ import org.objectweb.asm.ClassReader; public class Reflective { - public static MetaClass getMetaForClass(Class type){ - return getMetaClass(type); - } - - private static MetaClass getMetaClass(Class type) { + public static MetaClass getMetaClass(Class type) { try { ClassReader cr = Java.getClassReader(type); diff --git a/src/test/java/com/github/shautvast/reflective/ReflectiveTest.java b/src/test/java/com/github/shautvast/reflective/ReflectiveTest.java index 8abff2d..1bc8945 100644 --- a/src/test/java/com/github/shautvast/reflective/ReflectiveTest.java +++ b/src/test/java/com/github/shautvast/reflective/ReflectiveTest.java @@ -16,7 +16,7 @@ public class ReflectiveTest { @Test void testMethods() { Dummy dummy = new Dummy("bar"); - MetaClass metaDummy = Reflective.getMetaForClass(dummy.getClass()); + MetaClass metaDummy = Reflective.getMetaClass(dummy.getClass()); assertEquals("com.github.shautvast.reflective.ReflectiveTest$Dummy", metaDummy.getName()); Iterator fields = metaDummy.getFields().iterator(); @@ -52,7 +52,7 @@ public class ReflectiveTest { @Test void testInvokeGetter() { Dummy dummy = new Dummy("bar"); - MetaMethod getName = Reflective.getMetaForClass(dummy.getClass()).getMethod("getName").orElseGet(Assertions::fail); + MetaMethod getName = Reflective.getMetaClass(dummy.getClass()).getMethod("getName").orElseGet(Assertions::fail); assertThrows(Panic.class, () -> getName.invoke("foo").unwrap()); assertEquals("bar", getName.invoke(dummy).unwrap()); @@ -61,7 +61,7 @@ public class ReflectiveTest { @Test void testInvokeSetter() { Dummy dummy = new Dummy("bar"); - MetaClass metaForClass = Reflective.getMetaForClass(dummy.getClass()); + MetaClass metaForClass = Reflective.getMetaClass(dummy.getClass()); MetaMethod setName = metaForClass.getMethod("setName").orElseGet(Assertions::fail); assertEquals("bar", dummy.getName()); // before invoke