Ver código fonte

reflective: interfaces
reflective: BeanModel

Ranides Atterwim 10 anos atrás
pai
commit
1ac831e228

+ 26 - 0
assira/src/main/java/net/ranides/assira/reflection/BeanEvent.java

@@ -0,0 +1,26 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.reflection;
+
+import java.beans.EventSetDescriptor;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface BeanEvent extends IElement {
+    
+    @Override
+    BeanEvents collect();
+    
+    IClass type();
+    
+    BeanModel model();
+
+    EventSetDescriptor descriptor();
+    
+}

+ 40 - 0
assira/src/main/java/net/ranides/assira/reflection/BeanEvents.java

@@ -0,0 +1,40 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.reflection;
+
+import java.beans.EventSetDescriptor;
+import java.util.function.Predicate;
+import net.ranides.assira.collection.query.CQuery;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface BeanEvents extends IElements<BeanEvent> {
+    
+    BeanEvents require(Predicate<? super BeanEvent> predicate);
+    
+    BeanEvents require(IClass type);
+    
+    BeanEvents require(String name);
+    
+    BeanEvents discard(Predicate<? super BeanEvent> predicate);
+    
+    BeanEvents discard(IClass type);
+    
+    BeanEvents discard(String name);
+    
+    @Override
+    IClasses parent();
+    
+    IClasses type();
+    
+    IElements<BeanModel> model();
+    
+    CQuery<EventSetDescriptor> descriptor();
+    
+}

+ 21 - 0
assira/src/main/java/net/ranides/assira/reflection/BeanMethod.java

@@ -0,0 +1,21 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.reflection;
+
+import java.beans.MethodDescriptor;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface BeanMethod extends IMethod {
+    
+    BeanModel model();
+    
+    MethodDescriptor descriptor();
+    
+}

+ 71 - 0
assira/src/main/java/net/ranides/assira/reflection/BeanMethods.java

@@ -0,0 +1,71 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.reflection;
+
+import java.beans.MethodDescriptor;
+import java.lang.annotation.Annotation;
+import java.lang.invoke.MethodHandle;
+import java.lang.reflect.Method;
+import java.util.Set;
+import java.util.function.Predicate;
+import net.ranides.assira.collection.query.CQuery;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface BeanMethods extends IElements<BeanMethod> {
+    
+    BeanMethods require(Predicate<? super BeanMethod> predicate);
+    
+    BeanMethods require(IAnnotations annotations);
+    
+    BeanMethods require(Class<? extends Annotation> annotation);
+    
+    BeanMethods require(IAttribute attribute);
+    
+    BeanMethods require(Set<IAttribute> attributes);
+    
+    BeanMethods require(String name);
+    
+    BeanMethods require(IClass returns);
+    
+    BeanMethods require(IArguments arguments);
+    
+    BeanMethods discard(Predicate<? super BeanMethod> predicate);
+    
+    BeanMethods discard(IAnnotations annotations);
+    
+    BeanMethods discard(Class<? extends Annotation> annotation);
+    
+    BeanMethods discard(IAttribute attribute);
+    
+    BeanMethods discard(Set<IAttribute> attributes);
+    
+    BeanMethods discard(String name);
+        
+    BeanMethods discard(IClass returns);
+    
+    BeanMethods discard(IArguments arguments);
+    
+    BeanMethods matches(IClasses arguments);
+    
+    BeanMethods accepts(Object... arguments);
+        
+    IClasses returns();
+    
+    @Override
+    IClasses parent();
+
+    CQuery<Method> reflective();
+    
+    CQuery<BeanModel> model();
+    
+    CQuery<MethodDescriptor> descriptor();
+    
+    CQuery<MethodHandle> handle();
+}

+ 56 - 0
assira/src/main/java/net/ranides/assira/reflection/BeanModel.java

@@ -0,0 +1,56 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.reflection;
+
+import java.beans.BeanInfo;
+import java.lang.reflect.Type;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface BeanModel extends IElement {
+    
+    // http://docstore.mik.ua/orelly/java-ent/jnut/ch06_02.htm
+    
+    // https://docs.oracle.com/javase/7/docs/api/java/beans/Introspector.html
+    
+    // https://docs.oracle.com/javase/7/docs/api/java/beans/BeanInfo.html
+    
+    // http://commons.apache.org/proper/commons-beanutils/apidocs/org/apache/commons/beanutils/package-summary.html#standard
+    
+    static BeanModel typeinfo(IClass type) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+    
+    static BeanModel typeinfo(Type type) {
+        return typeinfo(IClass.typeinfo(type));
+    }
+    
+    static BeanModel typefor(Object object) {
+        return typeinfo(IClass.typefor(object));
+    }
+    
+    IClass type();
+    
+    BeanInfo descriptor();
+    
+    BeanProperties properties();
+    
+    BeanProperty property(String name);
+    
+    BeanMethods methods();
+    
+    BeanMethod method(String name);
+    
+    BeanEvents events();
+    
+    BeanEvent event(String name);
+    
+    Object construct();
+
+}

+ 54 - 0
assira/src/main/java/net/ranides/assira/reflection/BeanProperties.java

@@ -0,0 +1,54 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.reflection;
+
+import java.beans.PropertyDescriptor;
+import java.lang.annotation.Annotation;
+import java.util.Set;
+import java.util.function.Predicate;
+import net.ranides.assira.collection.query.CQuery;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface BeanProperties extends IElements<BeanProperty> {
+
+    BeanProperties require(Predicate<? super BeanProperty> predicate);
+    
+    BeanProperties require(IAnnotations annotations);
+    
+    BeanProperties require(Class<? extends Annotation> annotation);
+    
+    BeanProperties require(IClass type);
+    
+    BeanProperties require(IAttribute attribute);
+    
+    BeanProperties require(Set<IAttribute> attributes);
+    
+    BeanProperties require(String name);
+    
+    BeanProperties discard(Predicate<? super BeanProperty> predicate);
+    
+    BeanProperties discard(IAnnotations annotations);
+    
+    BeanProperties discard(Class<? extends Annotation> annotation);
+    
+    BeanProperties discard(IClass type);
+        
+    BeanProperties discard(IAttribute attribute);
+    
+    BeanProperties discard(Set<IAttribute> attributes);
+    
+    BeanProperties discard(String name);
+    
+    IClasses type();
+
+    IElements<? extends BeanModel> model();
+    
+    CQuery<PropertyDescriptor> descriptor();
+}

+ 37 - 0
assira/src/main/java/net/ranides/assira/reflection/BeanProperty.java

@@ -0,0 +1,37 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.reflection;
+
+import java.beans.PropertyDescriptor;
+import net.ranides.assira.generic.Wrapper;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface BeanProperty extends IElement {
+
+    @Override    
+    BeanProperties collect();
+    
+    IClass type();
+    
+    BeanModel model();
+    
+    PropertyDescriptor descriptor();
+    
+    Object get(Object that);
+    
+    void set(Object that, Object value);
+    
+    Wrapper<Object> bind(Object that);
+    
+    IMethod getter();
+    
+    IMethod setter();
+    
+}

+ 20 - 0
assira/src/main/java/net/ranides/assira/reflection/IAttribute.java

@@ -64,6 +64,26 @@ public enum IAttribute {
     
     LAMBDA          (0x80000000),   // special: used in IMethod
     
+    READABLE        (0x00010000),   // special: Bean property (support read)
+
+    WRITABLE        (0x00020000),   // special: Bean property (support write)
+    
+    MUTABLE         (0x20000000),   // special: Bean property (READABLE & WRITABLE)
+
+    INDEXED         (0x00040000),   // special: Bean property
+    
+    BOUND           (0x00080000),   // special: Bean property: PropertyChangeListener
+    
+    CONSTRAINED     (0x00100000),   // special: Bean property
+        
+    //RESERVED        (0x00200000),
+    
+    //RESERVED        (0x00400000),
+    
+    //RESERVED        (0x08000000),
+    
+    //RESERVED        (0x00800000),
+    
     ;
     
     private static final int M_BRIDGE   = 0x00000040;

+ 2 - 0
assira/src/main/java/net/ranides/assira/reflection/IClass.java

@@ -41,6 +41,8 @@ public interface IClass extends IElement, Comparable<IClass> {
     
     IFields fields();
     
+    IField field(String name);
+    
     IMethods constructors();
     
     IMethods methods();

+ 1 - 1
assira/src/main/java/net/ranides/assira/reflection/IFields.java

@@ -51,7 +51,7 @@ public interface IFields extends IElements<IField> {
     
     IFields discard(String name);
     
-    IClasses types();
+    IClasses type();
     
     @Override
     IClasses parent();

+ 1 - 1
assira/src/main/java/net/ranides/assira/reflection/IMethods.java

@@ -71,5 +71,5 @@ public interface IMethods extends IElements<IMethod> {
 
     CQuery<Method> reflective();
     
-    CQuery<MethodHandle> handles();
+    CQuery<MethodHandle> handle();
 }

+ 5 - 0
assira/src/main/java/net/ranides/assira/reflection/impl/AClass.java

@@ -49,6 +49,11 @@ public class AClass implements IClass {
     public IFields fields() {
         return AFields.EMPTY;
     }
+    
+    @Override
+    public IField field(String name) {
+        return fields().require(name).first();
+    }
 
     @Override
     public IMethods constructors() {

+ 1 - 1
assira/src/main/java/net/ranides/assira/reflection/impl/AFields.java

@@ -117,7 +117,7 @@ public class AFields extends AElements<IField> implements IFields {
     }
 
     @Override
-    public IClasses types() {
+    public IClasses type() {
         return new AClasses(AHints.EMPTY, stream(IField::type));
     }
 

+ 1 - 1
assira/src/main/java/net/ranides/assira/reflection/impl/AMethods.java

@@ -160,7 +160,7 @@ public class AMethods extends AElements<IMethod> implements IMethods {
     }
 
     @Override
-    public CQuery<MethodHandle> handles() {
+    public CQuery<MethodHandle> handle() {
         return stream().map(IMethod::handle);
     }
 

+ 1 - 1
assira/src/test/java/net/ranides/assira/reflection/impl/AMethodsTest.java

@@ -210,7 +210,7 @@ public class AMethodsTest {
         IMethods m1 = methods1().require("some1");
         
         assertEquals(777, m1.reflective().first().invoke(mcp));
-        assertEquals(777, m1.handles().first().invoke(mcp));
+        assertEquals(777, m1.handle().first().invoke(mcp));
     }
 
     private static IMethods methods1() {