more readme

This commit is contained in:
Shautvast 2023-07-29 00:43:57 +02:00
parent 89d20eec57
commit 152c3469d9
4 changed files with 61 additions and 9 deletions

View file

@ -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
```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;
}
}
}
```

View file

@ -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;
}
}
}

View file

@ -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);

View file

@ -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<MetaField> 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