in instrumentation/src/com/intellij/rt/coverage/instrumentation/filters/lines/KotlinCoroutinesFilter.java [102:137]
public void visitMethodInsn(int opcode, String owner, String name, String descriptor, boolean isInterface) {
super.visitMethodInsn(opcode, owner, name, descriptor, isInterface);
if (myState == 3 && opcode == Opcodes.INVOKESPECIAL
&& "java/lang/IllegalStateException".equals(owner)
&& "<init>".equals(name) && "(Ljava/lang/String;)V".equals(descriptor)) {
myState = 4;
} else {
myState = 0;
myHasInstructions = true;
}
boolean getCoroutinesSuspendedVisited = opcode == Opcodes.INVOKESTATIC
&& owner.equals("kotlin/coroutines/intrinsics/IntrinsicsKt")
&& name.equals("getCOROUTINE_SUSPENDED")
&& descriptor.equals("()" + InstrumentationUtils.OBJECT_TYPE);
String originalDesc = descriptor;
if (name.endsWith(KotlinDefaultArgsBranchFilter.DEFAULT_ARGS_SUFFIX)) {
String desc = KotlinDefaultArgsBranchFilter.getOriginalNameAndDesc(name, descriptor);
int index = desc.indexOf('(');
if (index > 0) {
originalDesc = desc.substring(index);
}
}
boolean suspendCallVisited = originalDesc.endsWith("Lkotlin/coroutines/Continuation;)" + InstrumentationUtils.OBJECT_TYPE)
|| owner.startsWith("kotlin/jvm/functions/Function")
&& name.equals("invoke") && opcode == Opcodes.INVOKEINTERFACE
&& descriptor.endsWith(")" + InstrumentationUtils.OBJECT_TYPE);
if (getCoroutinesSuspendedVisited || suspendCallVisited) {
myGetCoroutinesSuspendedVisited |= getCoroutinesSuspendedVisited;
mySuspendCallVisited |= suspendCallVisited;
} else {
myGetCoroutinesSuspendedVisited = false;
mySuspendCallVisited = false;
}
}