diff options
Diffstat (limited to 'agent/src/main/java/com/code_intelligence/jazzer/utils/Utils.kt')
-rw-r--r-- | agent/src/main/java/com/code_intelligence/jazzer/utils/Utils.kt | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/agent/src/main/java/com/code_intelligence/jazzer/utils/Utils.kt b/agent/src/main/java/com/code_intelligence/jazzer/utils/Utils.kt index 6d0b57ec..af8cce9b 100644 --- a/agent/src/main/java/com/code_intelligence/jazzer/utils/Utils.kt +++ b/agent/src/main/java/com/code_intelligence/jazzer/utils/Utils.kt @@ -39,11 +39,38 @@ val Class<*>.descriptor: String else -> throw IllegalArgumentException("Unknown class type: $name") } +val Class<*>.readableDescriptor: String + get() = when { + isPrimitive -> { + when (this) { + Boolean::class.javaPrimitiveType -> "boolean" + Byte::class.javaPrimitiveType -> "byte" + Char::class.javaPrimitiveType -> "char" + Short::class.javaPrimitiveType -> "short" + Int::class.javaPrimitiveType -> "int" + Long::class.javaPrimitiveType -> "long" + Float::class.javaPrimitiveType -> "float" + Double::class.javaPrimitiveType -> "double" + java.lang.Void::class.javaPrimitiveType -> "void" + else -> throw IllegalStateException("Unknown primitive type: $name") + } + } + isArray -> "${componentType.readableDescriptor}[]" + java.lang.Object::class.java.isAssignableFrom(this) -> name + else -> throw IllegalArgumentException("Unknown class type: $name") + } + val Executable.descriptor: String get() = parameterTypes.joinToString(separator = "", prefix = "(", postfix = ")") { parameterType -> parameterType.descriptor } + if (this is Method) returnType.descriptor else "V" +// This does not include the return type as the parameter descriptors already uniquely identify the executable. +val Executable.readableDescriptor: String + get() = parameterTypes.joinToString(separator = ",", prefix = "(", postfix = ")") { parameterType -> + parameterType.readableDescriptor + } + fun simpleFastHash(vararg strings: String): Int { var hash = 0 for (string in strings) { |