All Downloads are FREE. Search and download functionalities are using the official Maven repository.

kalang.runtime.util.MethodSelector Maven / Gradle / Ivy

There is a newer version: 1.11.0
Show newest version
package kalang.runtime.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 *
 * @author Kason Yang
 */
public abstract class MethodSelector {
    
    public boolean matchType(T objClass,T declaredClass){
        return isAssignableFrom(declaredClass, objClass);
    }
    
    public boolean matchType(T[] objClasses,T[] declaredClasses){
        int objLen = objClasses.length;
        int declaredLen = declaredClasses.length;
        if(objLen!=declaredLen) return false;
        for(int i=0;i select(M[] mds,String name,T... argTypes){
        List matched = new ArrayList(mds.length);
        for(M m:mds){
            if(!name.equals(getMethodName(m))) continue;
            T[] types = getMethodParameterTypes(m);
            if(equalsTypes(argTypes, types)){
                return Collections.singletonList(m);
            }
            if(matchType(argTypes, types)){
                matched.add(m);
            }
        }
        if(matched.size()<=1) return matched;
        return selectMostPrecise(matched,argTypes);
    }
    
    private boolean isMorePreciseTypes(T[] actualTypes,T[] typesToCompare1,T[] typesToCompare2){
        if(typesToCompare1.length!=typesToCompare2.length) return false;
        boolean isMorePrecise = false;
        for(int i=0;i selectMostPrecise(Listmds,T[] actualTypes){
        int size = mds.size();
        if(size==0) return new ArrayList();
        M ret = mds.get(0);
        for(int i=1;i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy