(node,file)
| 436 | return true |
| 437 | } |
| 438 | function traverseClass(node,file){ |
| 439 | node._file=file |
| 440 | node._value=getValue(node.id) |
| 441 | node._flow_id=node._value |
| 442 | if(r.FlowFilter[node._value]===false)return; |
| 443 | r.FlowNode[node._flow_id]=node; |
| 444 | if(r.FlowOne[node._flow_id]){ |
| 445 | r.FlowOne[node._flow_id].unshift(node._value) |
| 446 | }else{ |
| 447 | r.FlowOne[node._flow_id]=[node._value] |
| 448 | } |
| 449 | r.Flow+=` ${node._value}[${node._value}]\nclick ${node._value} "javascript:void(onFlowClick('${node._value}','${file}'))"\n` |
| 450 | r.FDPNode[node._flow_id]={id:node._value,w:node._value.length*gD3fontSize/1.6+gD3fontSize*2,text:`[${node._value}]`} |
| 451 | r.UMLClass[node._value]={} |
| 452 | r.UML+=` class ${node._value}{\n`; |
| 453 | for(let member of node.body.body){ |
| 454 | switch(member.type){ |
| 455 | case "MethodDefinition": |
| 456 | member._value=getValue(member) |
| 457 | member._flow_id=member._value |
| 458 | let func=member.value |
| 459 | let _name=getValue(member.key)=="constructor"?'#'+node._value:getValue(member.key) |
| 460 | func.id={type:"Identifier",name:_name,loc:{start:{},end:{}}} |
| 461 | traverseFunction(func,node,file,true) |
| 462 | break; |
| 463 | case "PropertyDefinition": |
| 464 | traverseProperty(member,node,file,r) |
| 465 | break |
| 466 | } |
| 467 | } |
| 468 | r.UML+=' }\n' |
| 469 | if(node.superClass){ |
| 470 | var f=getValue(node.superClass) |
| 471 | if(r.FDPNode[f]===undefined){ |
| 472 | r.FDPNode[f]={id:f,w:f.length*gD3fontSize/1.6+gD3fontSize*2,text:`[${f}]`} |
| 473 | } |
| 474 | r.UML+=` ${f} <|-- ${node._value}\n` |
| 475 | r.FlowLink+=`${f} ==o ${node._value}\n` |
| 476 | r.FDPLinks.push({source:f,target:node._value,value:6,dist:200,dash:"2,2"}) |
| 477 | |
| 478 | } |
| 479 | } |
| 480 | |
| 481 | function traverseProperty(member,cls,file,r){ |
| 482 | member._value=getValue(member) |
no test coverage detected