Skip to content

Commit

Permalink
Fix filterByAssignableParamTypes when meet primitive type (#52)
Browse files Browse the repository at this point in the history
  • Loading branch information
YifePlayte authored May 25, 2023
1 parent b41a0d1 commit 34c38c3
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 0 deletions.
4 changes: 4 additions & 0 deletions EzXHelper/api/EzXHelper.api
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ public final class com/github/kyuubiran/ezxhelper/ClassHelper {
public static synthetic fun invokeStaticMethod-FNSvj5E$default (Lcom/github/kyuubiran/ezxhelper/ClassHelper;Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
public final fun invokeStaticMethodBestMatch (Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
public static synthetic fun invokeStaticMethodBestMatch$default (Lcom/github/kyuubiran/ezxhelper/ClassHelper;Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
public final fun isPrimitiveTypeMatch (Ljava/lang/Class;)Z
public final fun setStaticObject (Ljava/lang/String;Ljava/lang/Object;)V
public final fun setStaticObjectUntilSuperclass (Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
public static synthetic fun setStaticObjectUntilSuperclass$default (Lcom/github/kyuubiran/ezxhelper/ClassHelper;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
public final fun toPrimitiveType ()Ljava/lang/Class;
}

public final class com/github/kyuubiran/ezxhelper/ClassHelper$Companion {
Expand Down Expand Up @@ -61,6 +63,7 @@ public final class com/github/kyuubiran/ezxhelper/ClassUtils {
public static synthetic fun invokeStaticMethod-zdxdtcc$default (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;[Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
public static final fun invokeStaticMethodBestMatch (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
public static synthetic fun invokeStaticMethodBestMatch$default (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Object;ILjava/lang/Object;)Ljava/lang/Object;
public static final fun isPrimitiveTypeMatch (Ljava/lang/Class;Ljava/lang/Class;)Z
public static final fun loadClass (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;
public static synthetic fun loadClass$default (Ljava/lang/String;Ljava/lang/ClassLoader;ILjava/lang/Object;)Ljava/lang/Class;
public static final fun loadClassOrNull (Ljava/lang/String;Ljava/lang/ClassLoader;)Ljava/lang/Class;
Expand All @@ -72,6 +75,7 @@ public final class com/github/kyuubiran/ezxhelper/ClassUtils {
public static final fun setStaticObject (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)V
public static final fun setStaticObjectUntilSuperclass (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V
public static synthetic fun setStaticObjectUntilSuperclass$default (Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
public static final fun toPrimitiveType (Ljava/lang/Class;)Ljava/lang/Class;
}

public final class com/github/kyuubiran/ezxhelper/Config {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,19 @@ class ClassHelper private constructor(private val clz: Class<*>) {
@Throws(NoSuchMethodException::class, IllegalArgumentException::class)
fun invokeStaticMethod(methodName: String, returnType: Class<*>? = null, paramTypes: ParamTypes = paramTypes(), params: Params = params()) =
ClassUtils.invokeStaticMethod(clz, methodName, returnType, paramTypes, params)

/**
* Check if two classes are equal or match the same primitive type
* @param clazz class to compare with
* @return `true` if two classes are equal or match the same primitive type, else `false`
*/
fun isPrimitiveTypeMatch(clazz: Class<*>) =
ClassUtils.isPrimitiveTypeMatch(clz, clazz)

/**
* Cast class to primitive type if possible
* @return primitive type class if possible or itself
*/
fun toPrimitiveType() =
ClassUtils.toPrimitiveType(clz)
}
Original file line number Diff line number Diff line change
Expand Up @@ -250,4 +250,36 @@ object ClassUtils {

return m.invoke(null, *params.params)
}

/**
* Check if two classes are equal or match the same primitive type
* @param clz1 class1
* @param clz2 class2
* @return `true` if two classes are equal or match the same primitive type, else `false`
*/
@JvmStatic
fun isPrimitiveTypeMatch(clz1: Class<*>, clz2: Class<*>): Boolean {
return toPrimitiveType(clz1) == toPrimitiveType(clz2)
}

/**
* Cast class to primitive type if possible
* @param clz class
* @return primitive type class if possible or itself
*/
@JvmStatic
fun toPrimitiveType(clz: Class<*>): Class<out Any> {
if (clz.isPrimitive) return clz
return when (clz) {
java.lang.Boolean::class.java -> Boolean::class.javaPrimitiveType!!
java.lang.Byte::class.java -> Byte::class.javaPrimitiveType!!
java.lang.Short::class.java -> Short::class.javaPrimitiveType!!
java.lang.Integer::class.java -> Int::class.javaPrimitiveType!!
java.lang.Long::class.java -> Long::class.javaPrimitiveType!!
java.lang.Float::class.java -> Float::class.javaPrimitiveType!!
java.lang.Double::class.java -> Double::class.javaPrimitiveType!!
java.lang.Character::class.java -> Char::class.javaPrimitiveType!!
else -> clz
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

package com.github.kyuubiran.ezxhelper.finders.base

import com.github.kyuubiran.ezxhelper.ClassUtils.isPrimitiveTypeMatch
import com.github.kyuubiran.ezxhelper.MemberExtensions
import java.lang.reflect.Member
import java.lang.reflect.Modifier
Expand Down Expand Up @@ -44,6 +45,7 @@ abstract class ExecutableFinder<E : Member, Self>(seq: Sequence<E>) : BaseMember
val clz1 = pt[i]
val clz2 = paramTypes[i] ?: continue
if (clz2.isAssignableFrom(clz1) || clz1.isAssignableFrom(clz2)) continue
if (isPrimitiveTypeMatch(clz1, clz2)) continue
if (clz1 != clz2) return@f false
}

Expand Down

0 comments on commit 34c38c3

Please sign in to comment.