Class KotlinDefaultArgumentsFilter
java.lang.Object
org.jacoco.core.internal.analysis.filter.KotlinDefaultArgumentsFilter
- All Implemented Interfaces:
IFilter
Filters branches that Kotlin compiler generates for default arguments.
For methods and constructors with default arguments Kotlin compiler generates
synthetic method with suffix "$default" or a synthetic constructor with last
argument "kotlin.jvm.internal.DefaultConstructorMarker" respectively. And in
this synthetic method for each default argument Kotlin compiler generates
following bytecode to determine if it should be used or not:
ILOAD maskVar ICONST_x, BIPUSH, SIPUSH, LDC or LDC_W IAND IFEQ label default argument label:If original method has
X arguments, then in synthetic method
maskVar is one of arguments from X+1 to
X+1+(X/32).
At least one of such arguments is not zero - invocation without default
arguments uses original non synthetic method.
This filter marks IFEQ instructions as ignored.-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static intcomputeNumberOfMaskArguments(int arguments) voidfilter(org.objectweb.asm.tree.MethodNode methodNode, IFilterContext context, IFilterOutput output) This method is called for every method.(package private) static booleanisDefaultArgumentsConstructor(org.objectweb.asm.tree.MethodNode methodNode) (package private) static booleanisDefaultArgumentsMethod(org.objectweb.asm.tree.MethodNode methodNode)
-
Constructor Details
-
KotlinDefaultArgumentsFilter
public KotlinDefaultArgumentsFilter()
-
-
Method Details
-
isDefaultArgumentsMethod
static boolean isDefaultArgumentsMethod(org.objectweb.asm.tree.MethodNode methodNode) -
isDefaultArgumentsConstructor
static boolean isDefaultArgumentsConstructor(org.objectweb.asm.tree.MethodNode methodNode) -
filter
public void filter(org.objectweb.asm.tree.MethodNode methodNode, IFilterContext context, IFilterOutput output) Description copied from interface:IFilterThis method is called for every method. The filter implementation is expected to inspect the provided method and report its result to the givenIFilterOutputinstance. -
computeNumberOfMaskArguments
static int computeNumberOfMaskArguments(int arguments) - Parameters:
arguments- number of arguments of synthetic method- Returns:
- number of arguments holding mask
-