public class FindTouchPointsMethodAdapter extends ContextMethodAwareMethodAdapter
touchPointListener
.Modifier and Type | Class and Description |
---|---|
(package private) static class |
FindTouchPointsMethodAdapter.Abc |
Modifier and Type | Field and Description |
---|---|
private java.util.List<org.objectweb.asm.tree.AbstractInsnNode> |
backlog
State of last N instructions.
|
private int |
currentLine
Line number of current line.
|
private java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> |
duplicatedLinesMap
|
private java.util.concurrent.atomic.AtomicInteger |
eventIdGenerator
Source of identifiers for events.
|
private java.util.Collection<java.util.regex.Pattern> |
ignoreRegexp
List of patterns to know that we don't want trace lines that are calls to some methods
|
private java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.util.LinkedList<java.lang.Integer>>> |
line2eventIds
Map of (line number -> (lineId -> List of eventIds)).
|
private java.util.LinkedList<java.lang.Integer> |
replyEventIdList
If we are currently processing a duplicated line, it is a list of identifiers that should be used for the line.
|
private java.util.LinkedList<java.lang.Integer> |
saveEventIdList
If we are currently processing a new (not duplicated line), it is a list (linked into
line2eventIds ) that we use to store newly generated identifiers into it,
otherwise it is null. |
private TouchPointListener |
touchPointListener
Backing listener that will be informed about all interesting events found
|
className, lastLineId, lineIdGenerator, methodName, methodSignature
Modifier | Constructor and Description |
---|---|
|
FindTouchPointsMethodAdapter(HistoryMethodAdapter mv,
java.lang.String className,
java.lang.String methodName,
java.lang.String methodSignature,
java.util.concurrent.atomic.AtomicInteger eventIdGenerator,
java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatedLinesMap,
java.util.concurrent.atomic.AtomicInteger lineIdGenerator) |
protected |
FindTouchPointsMethodAdapter(org.objectweb.asm.MethodVisitor mv,
java.util.List<org.objectweb.asm.tree.AbstractInsnNode> backlog,
java.lang.String className,
java.lang.String methodName,
java.lang.String methodSignature,
java.util.concurrent.atomic.AtomicInteger eventIdGenerator,
java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatedLinesMap,
java.util.concurrent.atomic.AtomicInteger lineIdGenerator) |
|
FindTouchPointsMethodAdapter(org.objectweb.asm.MethodVisitor mv,
java.lang.String className,
java.lang.String methodName,
java.lang.String methodSignature,
java.util.concurrent.atomic.AtomicInteger eventIdGenerator,
java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatedLinesMap,
java.util.concurrent.atomic.AtomicInteger lineIdGenerator) |
Modifier and Type | Method and Description |
---|---|
private int |
generateNewEventId() |
private int |
getEventId()
Depending on situation if we are processing a new line or duplicated line,
generates a new identifier or reuses previously generated for the same event.
|
java.util.Collection<java.util.regex.Pattern> |
getIgnoreRegexp() |
private java.lang.Integer |
getOriginForLine(int line,
java.lang.Integer lineId) |
TouchPointListener |
getTouchPointListener()
Gets backing listener that will be informed about all interesting events found
|
private boolean |
isDuplicatedLine(int line,
java.lang.Integer lineId)
Checks if given line is a duplicate of previously processed line
|
void |
setIgnoreRegexp(java.util.Collection<java.util.regex.Pattern> ignoreRegexp)
sets list of patterns to know that we don't want trace lines that are calls to some methods
|
void |
setTouchPointListener(TouchPointListener touchPointListener)
Niestety terminalnie.
|
private java.lang.String |
tryToFindSignatureOfConditionEnum()
We try to detect such a last 2 instructions and extract the enum signature.
|
void |
visitCode() |
void |
visitJumpInsn(int opcode,
org.objectweb.asm.Label label) |
void |
visitLabel(org.objectweb.asm.Label label) |
void |
visitLineNumber(int line,
org.objectweb.asm.Label label)
Processing information about new line.
|
void |
visitLookupSwitchInsn(org.objectweb.asm.Label def,
int[] values,
org.objectweb.asm.Label[] labels) |
void |
visitMethodInsn(int opcode,
java.lang.String owner,
java.lang.String method,
java.lang.String descr) |
void |
visitTableSwitchInsn(int min,
int max,
org.objectweb.asm.Label def,
org.objectweb.asm.Label[] labels) |
visitAnnotation, visitAnnotationDefault, visitAttribute, visitEnd, visitFieldInsn, visitFrame, visitIincInsn, visitInsn, visitInsnAnnotation, visitIntInsn, visitInvokeDynamicInsn, visitLdcInsn, visitLocalVariable, visitLocalVariableAnnotation, visitMaxs, visitMethodInsn, visitMultiANewArrayInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation, visitTypeInsn, visitVarInsn
private final java.util.concurrent.atomic.AtomicInteger eventIdGenerator
Remember to acquire identifiers using AtomicInteger.incrementAndGet()
(not AtomicInteger.getAndIncrement()
!!!)
private TouchPointListener touchPointListener
private int currentLine
It it NOT lineId
private java.util.Collection<java.util.regex.Pattern> ignoreRegexp
private final java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatedLinesMap
private final java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.util.LinkedList<java.lang.Integer>>> line2eventIds
For every line number, and for evere lineId in the line we store list of all generated events
When we will detect duplicated block of code in given line - instead of generating new eventIds we will use the same events
private java.util.LinkedList<java.lang.Integer> saveEventIdList
line2eventIds
) that we use to store newly generated identifiers into it,
otherwise it is null.private java.util.LinkedList<java.lang.Integer> replyEventIdList
private final java.util.List<org.objectweb.asm.tree.AbstractInsnNode> backlog
public FindTouchPointsMethodAdapter(HistoryMethodAdapter mv, java.lang.String className, java.lang.String methodName, java.lang.String methodSignature, java.util.concurrent.atomic.AtomicInteger eventIdGenerator, java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatedLinesMap, java.util.concurrent.atomic.AtomicInteger lineIdGenerator)
public FindTouchPointsMethodAdapter(org.objectweb.asm.MethodVisitor mv, java.lang.String className, java.lang.String methodName, java.lang.String methodSignature, java.util.concurrent.atomic.AtomicInteger eventIdGenerator, java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatedLinesMap, java.util.concurrent.atomic.AtomicInteger lineIdGenerator)
protected FindTouchPointsMethodAdapter(org.objectweb.asm.MethodVisitor mv, java.util.List<org.objectweb.asm.tree.AbstractInsnNode> backlog, java.lang.String className, java.lang.String methodName, java.lang.String methodSignature, java.util.concurrent.atomic.AtomicInteger eventIdGenerator, java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatedLinesMap, java.util.concurrent.atomic.AtomicInteger lineIdGenerator)
private int generateNewEventId()
private int getEventId()
public void visitCode()
visitCode
in class org.objectweb.asm.MethodVisitor
public void visitLineNumber(int line, org.objectweb.asm.Label label)
replyEventIdList
and saveEventIdList
and calls TouchPointListener.afterLineNumber(int, Label, int, MethodVisitor, String, String)
visitLineNumber
in class ContextMethodAwareMethodAdapter
private boolean isDuplicatedLine(int line, java.lang.Integer lineId)
line
- - line numberlineId
- - line identifierprivate java.lang.Integer getOriginForLine(int line, java.lang.Integer lineId)
line
- - line numberlineId
- - line identifierpublic void visitLabel(org.objectweb.asm.Label label)
visitLabel
in class org.objectweb.asm.MethodVisitor
public void visitJumpInsn(int opcode, org.objectweb.asm.Label label)
visitJumpInsn
in class org.objectweb.asm.MethodVisitor
public void visitMethodInsn(int opcode, java.lang.String owner, java.lang.String method, java.lang.String descr)
visitMethodInsn
in class org.objectweb.asm.MethodVisitor
public void visitLookupSwitchInsn(org.objectweb.asm.Label def, int[] values, org.objectweb.asm.Label[] labels)
visitLookupSwitchInsn
in class org.objectweb.asm.MethodVisitor
public void visitTableSwitchInsn(int min, int max, org.objectweb.asm.Label def, org.objectweb.asm.Label[] labels)
visitTableSwitchInsn
in class org.objectweb.asm.MethodVisitor
private java.lang.String tryToFindSignatureOfConditionEnum()
public TouchPointListener getTouchPointListener()
public void setTouchPointListener(TouchPointListener touchPointListener)
public java.util.Collection<java.util.regex.Pattern> getIgnoreRegexp()
public void setIgnoreRegexp(java.util.Collection<java.util.regex.Pattern> ignoreRegexp)