(member,cls,file,symbol)
| 198 | } |
| 199 | |
| 200 | function traverseProperty(member,cls,file,symbol){ |
| 201 | member._flow_id=member.value+'_'+cls.value |
| 202 | member._flow_from=cls.value |
| 203 | member._flow_prop=`|${symbol}${member.value.replaceAll('|','\|').replaceAll('[','').replaceAll(']','')}|` |
| 204 | member._file=file |
| 205 | if(r.FlowFilter[member._flow_id]===false)return; |
| 206 | r.FlowNode[member._flow_id]=member; |
| 207 | r.UML+=` ${symbol}${member.value}\n` |
| 208 | // console.log('prop',member) |
| 209 | if(r.showCall)_doBody(member,file) |
| 210 | function _doBody(node,file){ |
| 211 | if(!node.body)return |
| 212 | for(let n of node.body ){ |
| 213 | n._file=file |
| 214 | n._flow_id=n.value+'_'+node._flow_id |
| 215 | n._flow_from=node._flow_from |
| 216 | n._flow_prop=node._flow_prop |
| 217 | r.FlowNode[n._flow_id]=n |
| 218 | if(n.type=="Expression"){ |
| 219 | // console.log('var',n) |
| 220 | n._flow_id=node._flow_id; |
| 221 | _doBody(n,file) |
| 222 | }else if(r.FlowFilter[n._flow_id]&&(n.type=="NewExpression"||n.type=="CallExpression")){ |
| 223 | if(n.type=="NewExpression"){ |
| 224 | r.UMLClass[cls.value][n._flow_id]=n; |
| 225 | n._flow_str=` ${n._flow_id}[${n.value}]\nclick ${n._flow_id} "javascript:void(onFlowClick('${n._flow_id}','${file}'))"\n` |
| 226 | r.FDPNode[n._flow_id]={id:n._flow_id,w:n.value.length*gD3fontSize/1.6,text:`${n.value}`} |
| 227 | }else{ |
| 228 | n._flow_str=` ${n._flow_id}([${n.value}])\nclick ${n._flow_id} "javascript:void(onFlowClick('${n._flow_id}','${file}'))"\n` |
| 229 | r.FDPNode[n._flow_id]={id:n._flow_id,w:n.value.length*gD3fontSize/1.6+gD3fontSize*2,text:`${n.value}()`} |
| 230 | } |
| 231 | r.Flow+=n._flow_str; |
| 232 | } |
| 233 | } |
| 234 | } |
| 235 | } |
| 236 | |
| 237 | function traverseMethod(member,cls,file,symbol){ |
| 238 | var method=cls.value?member.value+'_'+cls.value:member.value |
no test coverage detected