Skip to content

Commit f97d6e9

Browse files
DaniilStepanovlehvolk
authored andcommitted
Bug with invokedynamic bsm handle fixed
1 parent c4468eb commit f97d6e9

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

jacodb-core/src/main/kotlin/org/jacodb/impl/cfg/MethodNodeBuilder.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.jacodb.api.cfg.*
2323
import org.jacodb.impl.cfg.util.*
2424
import org.objectweb.asm.Handle
2525
import org.objectweb.asm.Opcodes
26+
import org.objectweb.asm.Opcodes.H_GETSTATIC
2627
import org.objectweb.asm.Type
2728
import org.objectweb.asm.tree.*
2829

@@ -562,7 +563,11 @@ class MethodNodeBuilder(
562563
tag,
563564
declaringClass.jvmClassName,
564565
name,
565-
"(${argTypes.joinToString("") { it.jvmTypeName }})${returnType.jvmTypeName}",
566+
if (argTypes.isEmpty() && tag <= H_GETSTATIC) {
567+
returnType.jvmTypeName
568+
} else {
569+
"(${argTypes.joinToString("") { it.jvmTypeName }})${returnType.jvmTypeName}"
570+
},
566571
isInterface
567572
)
568573
private val JcRawMethodConstant.asAsmType: Type

jacodb-core/src/main/kotlin/org/jacodb/impl/cfg/RawInstListBuilder.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,8 +1110,16 @@ class RawInstListBuilder(
11101110
tag,
11111111
owner.typeName(),
11121112
name,
1113-
Type.getArgumentTypes(desc).map { it.descriptor.typeName() },
1114-
Type.getReturnType(desc).descriptor.typeName(),
1113+
if (desc.contains("(")) {
1114+
Type.getArgumentTypes(desc).map { it.descriptor.typeName() }
1115+
} else {
1116+
listOf()
1117+
},
1118+
if (desc.contains("(")) {
1119+
Type.getReturnType(desc).descriptor.typeName()
1120+
} else {
1121+
Type.getReturnType("(;)$desc").descriptor.typeName()
1122+
},
11151123
isInterface
11161124
)
11171125

@@ -1125,7 +1133,6 @@ class RawInstListBuilder(
11251133

11261134
private fun buildInvokeDynamicInsn(insnNode: InvokeDynamicInsnNode) {
11271135
val desc = insnNode.desc
1128-
val bsmMethod = insnNode.bsm.bsmHandleArg
11291136
val bsmArgs = insnNode.bsmArgs.map {
11301137
when (it) {
11311138
is Number -> bsmNumberArg(it)
@@ -1136,6 +1143,7 @@ class RawInstListBuilder(
11361143
}
11371144
}.reversed()
11381145
val args = Type.getArgumentTypes(desc).map { pop() }.reversed()
1146+
val bsmMethod = insnNode.bsm.bsmHandleArg
11391147
val expr = JcRawDynamicCallExpr(
11401148
bsmMethod,
11411149
bsmArgs,

0 commit comments

Comments
 (0)