MCPcopy Create free account
hub / github.com/davidkingzyb/SCAST / traverseMethod

Function traverseMethod

js/SCAST.js:787–860  ·  view source on GitHub ↗
(member,cls,file,symbol)

Source from the content-addressed store, hash-verified

785 }
786
787 function traverseMethod(member,cls,file,symbol){
788 var method=cls.value?member.value+'_'+cls.value:member.value
789 if(r.FlowOne[member.value]){
790 if(r.FlowOne[member.value].indexOf(method)<0){
791 r.FlowOne[member.value].unshift(method)
792 }
793 }else{
794 r.FlowOne[member.value]=[method]
795 }
796 member._flow_id=method
797 member._flow_from=cls.value
798 member._file=file
799 if(r.FlowFilter[member._flow_id]===false)return;
800 r.FlowNode[member._flow_id]=member;
801 r.FDPNode[member._flow_id]={id:member._flow_id,w:member.value.length*d3config.fontsize/1.6+d3config.fontsize*3,text:`${symbol||':'}${member.value}()`}
802 if(symbol)r.UML+=` ${symbol}${member.value}()\n`
803 if(member.base||member.value==cls.value){//constructor
804 r.Flow+=` ${member._flow_id}(${member.value})\nclick ${member._flow_id} "javascript:void(onFlowClick('${member._flow_id}','${file}'))"\n`
805 }else{
806 r.Flow+=` ${member._flow_id}([${member.value}])\nclick ${member._flow_id} "javascript:void(onFlowClick('${member._flow_id}','${file}'))"\n`
807 }
808 if(cls.value){
809 r.FlowLink+=`${cls.value} --o ${member._flow_id}\n`
810 r.FDPLinks.push({source:cls.value,target:member._flow_id,value:2})
811 }
812 if(r.showCall)_doBody(member,file)
813 function _doBody(node,file){
814 if(!node.body)return
815 for(let n of node.body ){
816 n._file=file
817 n._flow_id=n.value+'_'+node._flow_id
818 n._flow_from=r.showIf?node._flow_id:method
819 if(n.type=="IfStatement"||n.type=="LoopStatement"){//can't show condition CallExpression
820 if(r.showIf){
821 r.Flow+=n.type=="IfStatement"?` ${n._flow_id}{${n.value}}\nclick ${n._flow_id} "javascript:void(onFlowClick('${n._flow_id}','${file}'))"\n`:` ${n._flow_id}((${n.value}))\nclick ${n._flow_id} "javascript:void(onFlowClick('${n._flow_id}','${file}'))"\n`
822 r.FDPNode[n._flow_id]={id:n._flow_id,w:0,text:n.type=="IfStatement"?'🔷':'🔵'}
823 }
824 if(n.condition&&n.condition.value)n._flow_condition='|'+mermaidRepl(n.condition.value)+'|'
825 _doBody(n,file)
826 }else if(r.FlowFilter[n._flow_id]&&(n.type=="NewExpression"||n.type=="CallExpression")){
827 if(n.type=="NewExpression"){
828 r.FlowVarNew[node.value]=n.value
829 if(cls.value)r.UMLClass[cls.value][n._flow_id]=n;
830 n._flow_str=` ${n._flow_id}[${n.value}]\nclick ${n._flow_id} "javascript:void(onFlowClick('${n._flow_id}','${file}'))"\n`
831 r.FDPNode[n._flow_id]={id:n._flow_id,w:n.value.length*d3config.fontsize/1.6,text:n.value}
832 }else{
833 if(n.callee?.value==node.value){
834 if(r.showMethod){n._flow_callee=n.value+'_'+cls.value}
835 else{n._flow_callee=n.value}
836 }else{
837 n._flow_callee=n.callee?.value;
838 }
839 // console.log('callee',n._flow_callee,cls,n,node)
840 if(r.FlowNode[n._flow_id])n._flow_id=n._flow_callee+'_'+n._flow_id;
841 n._flow_str=` ${n._flow_id}([${n.value}])\nclick ${n._flow_id} "javascript:void(onFlowClick('${n._flow_id}','${file}'))"\n`
842 r.FDPNode[n._flow_id]={id:n._flow_id,w:n.value.length*d3config.fontsize/1.6+d3config.fontsize*2,text:n.value+'()'}
843 }
844 r.Flow+=n._flow_str;

Callers 2

analysisMermaidFunction · 0.70
traverseClassFunction · 0.70

Calls 1

_doBodyFunction · 0.70

Tested by

no test coverage detected