public class DetectDuplicatedCodeMethodVisitor extends ContextMethodAwareMethodAdapter
duplicatesCollector structure.
See DetectDuplicatedCodeClassVisitor about reasons for the class.| Modifier and Type | Class and Description |
|---|---|
private static class |
DetectDuplicatedCodeMethodVisitor.LineIdWithCodeFootstamp
Represents pair of lineId and
CodeFootstamp connected with that DetectDuplicatedCodeMethodVisitor.LineIdWithCodeFootstamp.lineId |
| Modifier and Type | Field and Description |
|---|---|
private CodeFootstamp |
currentLineFootstamp
CodeFootstamp of currently analyzed block of code. |
private java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> |
duplicatesCollector
Map of (lineNumber -> (duplicate lineId -> origin lineId)).
|
private java.util.Map<java.lang.Integer,java.util.List<DetectDuplicatedCodeMethodVisitor.LineIdWithCodeFootstamp>> |
line2label2codefootstamp
Map of (lineNumber -> (list of pairs: lineId,
CodeFootstamp for the lineId))). |
private org.apache.log4j.Logger |
logger |
className, lastLineId, lineIdGenerator, methodName, methodSignature| Constructor and Description |
|---|
DetectDuplicatedCodeMethodVisitor(org.objectweb.asm.MethodVisitor mv,
java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatesCollector,
java.lang.String className,
java.lang.String methodName,
java.lang.String methodSignature,
java.util.concurrent.atomic.AtomicInteger lineIdGenerator) |
| Modifier and Type | Method and Description |
|---|---|
void |
putDuplicatedLinesIntoMap(java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> res)
Analyzes (compare) all footstamps stored in
line2label2codefootstamp and add found duplicated
into duplicatesCollector |
private java.util.Map<java.lang.Integer,java.lang.Integer> |
putDuplicates(java.util.List<DetectDuplicatedCodeMethodVisitor.LineIdWithCodeFootstamp> listOfFootstamps)
Analyzes (compares) a list of duplicates connected to the line with the same number and
add found duplicated into
duplicatesCollector |
void |
visitEnd() |
void |
visitFieldInsn(int access,
java.lang.String name,
java.lang.String description,
java.lang.String signature) |
void |
visitIincInsn(int opCode,
int variable) |
void |
visitInsn(int opCode) |
void |
visitIntInsn(int opCode,
int variable) |
void |
visitJumpInsn(int opCode,
org.objectweb.asm.Label label) |
void |
visitLabel(org.objectweb.asm.Label label) |
void |
visitLdcInsn(java.lang.Object obj) |
void |
visitLineNumber(int lineNumber,
org.objectweb.asm.Label label)
Starts a new block and assigns a new
currentLineFootstamp. |
void |
visitLookupSwitchInsn(org.objectweb.asm.Label arg0,
int[] arg1,
org.objectweb.asm.Label[] arg2) |
void |
visitMethodInsn(int opCode,
java.lang.String className,
java.lang.String methodName,
java.lang.String description) |
void |
visitMultiANewArrayInsn(java.lang.String type,
int arg1) |
void |
visitTableSwitchInsn(int arg0,
int arg1,
org.objectweb.asm.Label arg2,
org.objectweb.asm.Label[] arg3) |
visitAnnotation, visitAnnotationDefault, visitAttribute, visitCode, visitFrame, visitInsnAnnotation, visitInvokeDynamicInsn, visitLocalVariable, visitLocalVariableAnnotation, visitMaxs, visitMethodInsn, visitParameter, visitParameterAnnotation, visitTryCatchAnnotation, visitTryCatchBlock, visitTypeAnnotation, visitTypeInsn, visitVarInsnprivate final org.apache.log4j.Logger logger
private final java.util.Map<java.lang.Integer,java.util.List<DetectDuplicatedCodeMethodVisitor.LineIdWithCodeFootstamp>> line2label2codefootstamp
CodeFootstamp for the lineId))).private final java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatesCollector
visitEnd() method.private CodeFootstamp currentLineFootstamp
CodeFootstamp of currently analyzed block of code. We will append to that variable
events that we will see in the current block of code.public DetectDuplicatedCodeMethodVisitor(org.objectweb.asm.MethodVisitor mv, java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> duplicatesCollector, java.lang.String className, java.lang.String methodName, java.lang.String methodSignature, java.util.concurrent.atomic.AtomicInteger lineIdGenerator)
public void visitLineNumber(int lineNumber, org.objectweb.asm.Label label)
Starts a new block and assigns a new currentLineFootstamp.
Put's the new DetectDuplicatedCodeMethodVisitor.LineIdWithCodeFootstamp into line2label2codefootstamp
visitLineNumber in class ContextMethodAwareMethodAdapterpublic void visitLabel(org.objectweb.asm.Label label)
visitLabel in class org.objectweb.asm.MethodVisitorpublic void visitFieldInsn(int access, java.lang.String name, java.lang.String description, java.lang.String signature)
visitFieldInsn in class org.objectweb.asm.MethodVisitorpublic void visitInsn(int opCode)
visitInsn in class org.objectweb.asm.MethodVisitorpublic void visitIntInsn(int opCode, int variable)
visitIntInsn in class org.objectweb.asm.MethodVisitorpublic void visitIincInsn(int opCode, int variable)
visitIincInsn in class org.objectweb.asm.MethodVisitorpublic void visitJumpInsn(int opCode, org.objectweb.asm.Label label)
visitJumpInsn in class org.objectweb.asm.MethodVisitorpublic void visitLdcInsn(java.lang.Object obj)
visitLdcInsn in class org.objectweb.asm.MethodVisitorpublic void visitMethodInsn(int opCode, java.lang.String className, java.lang.String methodName, java.lang.String description)
visitMethodInsn in class org.objectweb.asm.MethodVisitorpublic void visitMultiANewArrayInsn(java.lang.String type, int arg1)
visitMultiANewArrayInsn in class org.objectweb.asm.MethodVisitorpublic void visitLookupSwitchInsn(org.objectweb.asm.Label arg0, int[] arg1, org.objectweb.asm.Label[] arg2)
visitLookupSwitchInsn in class org.objectweb.asm.MethodVisitorpublic void visitTableSwitchInsn(int arg0, int arg1, org.objectweb.asm.Label arg2, org.objectweb.asm.Label[] arg3)
visitTableSwitchInsn in class org.objectweb.asm.MethodVisitorpublic void visitEnd()
visitEnd in class org.objectweb.asm.MethodVisitorpublic void putDuplicatedLinesIntoMap(java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> res)
line2label2codefootstamp and add found duplicated
into duplicatesCollectorprivate java.util.Map<java.lang.Integer,java.lang.Integer> putDuplicates(java.util.List<DetectDuplicatedCodeMethodVisitor.LineIdWithCodeFootstamp> listOfFootstamps)
Analyzes (compares) a list of duplicates connected to the line with the same number and
add found duplicated into duplicatesCollector
listOfFootstamps - - list of footstamps connected with a source-code line with the same number