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, visitVarInsn
private 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 ContextMethodAwareMethodAdapter
public void visitLabel(org.objectweb.asm.Label label)
visitLabel
in class org.objectweb.asm.MethodVisitor
public void visitFieldInsn(int access, java.lang.String name, java.lang.String description, java.lang.String signature)
visitFieldInsn
in class org.objectweb.asm.MethodVisitor
public void visitInsn(int opCode)
visitInsn
in class org.objectweb.asm.MethodVisitor
public void visitIntInsn(int opCode, int variable)
visitIntInsn
in class org.objectweb.asm.MethodVisitor
public void visitIincInsn(int opCode, int variable)
visitIincInsn
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 visitLdcInsn(java.lang.Object obj)
visitLdcInsn
in class org.objectweb.asm.MethodVisitor
public void visitMethodInsn(int opCode, java.lang.String className, java.lang.String methodName, java.lang.String description)
visitMethodInsn
in class org.objectweb.asm.MethodVisitor
public void visitMultiANewArrayInsn(java.lang.String type, int arg1)
visitMultiANewArrayInsn
in class org.objectweb.asm.MethodVisitor
public void visitLookupSwitchInsn(org.objectweb.asm.Label arg0, int[] arg1, org.objectweb.asm.Label[] arg2)
visitLookupSwitchInsn
in class org.objectweb.asm.MethodVisitor
public void visitTableSwitchInsn(int arg0, int arg1, org.objectweb.asm.Label arg2, org.objectweb.asm.Label[] arg3)
visitTableSwitchInsn
in class org.objectweb.asm.MethodVisitor
public void visitEnd()
visitEnd
in class org.objectweb.asm.MethodVisitor
public void putDuplicatedLinesIntoMap(java.util.Map<java.lang.Integer,java.util.Map<java.lang.Integer,java.lang.Integer>> res)
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
listOfFootstamps
- - list of footstamps connected with a source-code line with the same number