diff options
author | Evgeny Mandrikov <138671+Godin@users.noreply.github.com> | 2019-07-22 12:22:07 +0200 |
---|---|---|
committer | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2019-07-22 12:22:07 +0200 |
commit | 07f10794af7dd5e1ee8d2225ae57b291ffce1c77 (patch) | |
tree | 9448f3cf1b470e74bbb57504516746ec1c46e705 /org.jacoco.core/src/org/jacoco/core/internal/analysis | |
parent | 103c66f569962cf15c6669ba5445f619f3040281 (diff) | |
download | jacoco-07f10794af7dd5e1ee8d2225ae57b291ffce1c77.tar.gz |
KotlinDefaultArgumentsFilter should not assume that all parameters consume one slot (#908)
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/internal/analysis')
-rw-r--r-- | org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java index a7a05cf7..6627ffe5 100644 --- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java +++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java @@ -105,8 +105,7 @@ public final class KotlinDefaultArgumentsFilter implements IFilter { } final Set<AbstractInsnNode> ignore = new HashSet<AbstractInsnNode>(); - final int maskVar = Type.getMethodType(methodNode.desc) - .getArgumentTypes().length - (constructor ? 1 : 2); + final int maskVar = maskVar(methodNode.desc, constructor); while (true) { if (cursor.getOpcode() != Opcodes.ILOAD) { break; @@ -129,6 +128,22 @@ public final class KotlinDefaultArgumentsFilter implements IFilter { output.ignore(i, i); } } + + private static int maskVar(final String desc, + final boolean constructor) { + int slot = 0; + if (constructor) { + // one slot for reference to current object + slot++; + } + final Type[] argumentTypes = Type.getMethodType(desc) + .getArgumentTypes(); + final int penultimateArgument = argumentTypes.length - 2; + for (int i = 0; i < penultimateArgument; i++) { + slot += argumentTypes[i].getSize(); + } + return slot; + } } } |