public class JavaStringSwitchFilter extends CoverageFilter
switch by String, Java compiler generates extra branches.
Firstly, check for null string if applicable:
And then in each branch of the switch there is a check for equality:
And then another switch by slot:
All branches except for the last switch should be ignored.
myContext| Constructor and Description |
|---|
JavaStringSwitchFilter() |
| Modifier and Type | Method and Description |
|---|---|
boolean |
isApplicable(InstrumentationData context) |
void |
visitFieldInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor) |
void |
visitIincInsn(int varIndex,
int increment) |
void |
visitInsn(int opcode) |
void |
visitIntInsn(int opcode,
int operand) |
void |
visitInvokeDynamicInsn(java.lang.String name,
java.lang.String descriptor,
org.jetbrains.coverage.org.objectweb.asm.Handle bootstrapMethodHandle,
java.lang.Object... bootstrapMethodArguments) |
void |
visitJumpInsn(int opcode,
org.jetbrains.coverage.org.objectweb.asm.Label label) |
void |
visitLabel(org.jetbrains.coverage.org.objectweb.asm.Label label) |
void |
visitLdcInsn(java.lang.Object value) |
void |
visitLineNumber(int line,
org.jetbrains.coverage.org.objectweb.asm.Label start) |
void |
visitLookupSwitchInsn(org.jetbrains.coverage.org.objectweb.asm.Label dflt,
int[] keys,
org.jetbrains.coverage.org.objectweb.asm.Label[] labels) |
void |
visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor,
boolean isInterface) |
void |
visitMultiANewArrayInsn(java.lang.String descriptor,
int numDimensions) |
void |
visitTableSwitchInsn(int min,
int max,
org.jetbrains.coverage.org.objectweb.asm.Label dflt,
org.jetbrains.coverage.org.objectweb.asm.Label... labels) |
void |
visitTypeInsn(int opcode,
java.lang.String type) |
void |
visitVarInsn(int opcode,
int varIndex) |
initFiltergetDelegate, visitAnnotableParameterCount, visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitEnd, visitFrame, visitInsnAnnotation, visitLocalVariable, visitLocalVariableAnnotation, visitMaxs, visitMethodInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotationpublic boolean isApplicable(InstrumentationData context)
isApplicable in class CoverageFilterpublic void visitInsn(int opcode)
visitInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitIntInsn(int opcode,
int operand)
visitIntInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitVarInsn(int opcode,
int varIndex)
visitVarInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor,
boolean isInterface)
visitMethodInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitTableSwitchInsn(int min,
int max,
org.jetbrains.coverage.org.objectweb.asm.Label dflt,
org.jetbrains.coverage.org.objectweb.asm.Label... labels)
visitTableSwitchInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitLookupSwitchInsn(org.jetbrains.coverage.org.objectweb.asm.Label dflt,
int[] keys,
org.jetbrains.coverage.org.objectweb.asm.Label[] labels)
visitLookupSwitchInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitLdcInsn(java.lang.Object value)
visitLdcInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitJumpInsn(int opcode,
org.jetbrains.coverage.org.objectweb.asm.Label label)
visitJumpInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitLabel(org.jetbrains.coverage.org.objectweb.asm.Label label)
visitLabel in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitInvokeDynamicInsn(java.lang.String name,
java.lang.String descriptor,
org.jetbrains.coverage.org.objectweb.asm.Handle bootstrapMethodHandle,
java.lang.Object... bootstrapMethodArguments)
visitInvokeDynamicInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitIincInsn(int varIndex,
int increment)
visitIincInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitTypeInsn(int opcode,
java.lang.String type)
visitTypeInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitMultiANewArrayInsn(java.lang.String descriptor,
int numDimensions)
visitMultiANewArrayInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitFieldInsn(int opcode,
java.lang.String owner,
java.lang.String name,
java.lang.String descriptor)
visitFieldInsn in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitorpublic void visitLineNumber(int line,
org.jetbrains.coverage.org.objectweb.asm.Label start)
visitLineNumber in class org.jetbrains.coverage.org.objectweb.asm.MethodVisitor