浏览代码

new: CQuery#fetch
new: IExecutable#declares
new: IExecutable#matches(IArguments)

Mariusz Sieroń 6 年之前
父节点
当前提交
7356e8f5d7

+ 4 - 2
assira/src/main/java/net/ranides/assira/collection/query/CQuery.java

@@ -36,6 +36,8 @@ public interface CQuery<T> extends Iterable<T> {
     List<T> list();
     
     Set<T> set();
+
+    CQuery<T> fetch();
     
     <K> Map<K,T> group(Function<? super T, ? extends K> key);
     
@@ -44,9 +46,9 @@ public interface CQuery<T> extends Iterable<T> {
     int size();
     
     boolean isEmpty();
-    
+
     CQuery<T> limit(Predicate<? super T> p);
-    
+
     CQuery<T> limit(int n);
     
     CQuery<T> skip(int n);

+ 5 - 0
assira/src/main/java/net/ranides/assira/collection/query/CQueryAbstract.java

@@ -55,6 +55,11 @@ public abstract class CQueryAbstract<T> implements CQuery<T> {
         return stream().collect(Collectors.toSet());
     }
 
+    @Override
+    public final CQuery<T> fetch() {
+        return CQueryBuilder.fromCollection(list());
+    }
+
     @Override
     public CQuery<T> limit(Predicate<? super T> p) {
         return new CQIterable<>(() -> IteratorUtils.limit(iterator(), p));

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

@@ -29,9 +29,21 @@ public interface IExecutable extends IElement {
 
     @Override
     IClass<?> parent();
+
+    boolean declares(IArguments arguments);
+
+    boolean declares(IClasses arguments);
+
+    boolean declares(IClass<?>... arguments);
+
+    boolean declares(Class<?>... arguments);
+
+    boolean declares();
     
+    boolean matches(IArguments arguments);
+
     boolean matches(IClasses arguments);
-    
+
     boolean matches(IClass<?>... arguments);
     
     boolean matches(Class<?>... arguments);

+ 31 - 4
assira/src/main/java/net/ranides/assira/reflection/impl/AExecutable.java

@@ -9,10 +9,7 @@ package net.ranides.assira.reflection.impl;
 
 import net.ranides.assira.collection.arrays.ArrayUtils;
 import net.ranides.assira.functional.VarFunction;
-import net.ranides.assira.reflection.IClass;
-import net.ranides.assira.reflection.IClasses;
-import net.ranides.assira.reflection.IContext;
-import net.ranides.assira.reflection.IExecutable;
+import net.ranides.assira.reflection.*;
 import net.ranides.assira.trace.ExceptionUtils;
 
 import java.lang.annotation.Annotation;
@@ -43,6 +40,36 @@ public abstract class AExecutable implements IExecutable {
         return annotations().first(type);
     }
 
+    @Override
+    public final boolean declares(IArguments arguments) {
+        return declares(arguments.types());
+    }
+
+    @Override
+    public final boolean declares(IClasses arguments) {
+        return this.arguments().types().raw().list().equals(arguments.raw().list());
+    }
+
+    @Override
+    public final boolean declares(IClass<?>... arguments) {
+        return declares(IClasses.typeinfo(arguments));
+    }
+
+    @Override
+    public final boolean declares(Class<?>... arguments) {
+        return declares(IClasses.typeinfo(arguments));
+    }
+
+    @Override
+    public final boolean declares() {
+        return declares(IClasses.EMPTY);
+    }
+
+    @Override
+    public final boolean matches(IArguments arguments) {
+        return this.arguments().types().isSuper(arguments.types());
+    }
+
     @Override
     public final boolean matches(IClasses arguments) {
         return this.arguments().types().isSuper(arguments);