kalang.runtime.util.MethodSelector Maven / Gradle / Ivy
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