protected void GenerateForClass( Hashtable htDefs, Hashtable htUses, ClassComponent cls ) { ArrayList uses = new ArrayList(); ArrayList defs = new ArrayList(); TemporaryFieldComponent temp = new TemporaryFieldComponent( cls, cls.Name, cls.FullName ); foreach( FieldComponent field in htUses.Keys ) { if( (ArrayList)htUses[ field ] != null ) { foreach( object obj in (ArrayList)htUses[ field ] ) { if( ! uses.Contains( obj ) ) { uses.Add( obj ); } } } if( (ArrayList)htDefs[ field ] != null ) { foreach( object obj in (ArrayList)htDefs[ field ] ) { if( ! defs.Contains( obj ) ) { defs.Add( obj ); } } } } temp.Uses = uses; temp.Defs = defs; if( temp.Uses.Count > 0 || temp.Defs.Count > 0 ) m_list.Add( temp ); }
public void ProcessStuff( ClassComponent cls ) { Hashtable htUses = SearchUses( cls ); Hashtable htDefs = SearchDefs( cls, htUses ); GenerateForClass( htUses, htDefs, cls ); foreach( ClassComponent inner in cls.InnerClasses ) { ProcessStuff( inner ); } }
public void ProcessStuff( ClassComponent cls ) { ClassCount++; foreach( MethodComponent meth in cls.Methods ) { Lines += meth.Lines.Count; } foreach( ClassComponent inner in cls.InnerClasses ) { ProcessStuff( inner ); ClassCount++; } }
public Hashtable SearchUses( ClassComponent cls ) { Hashtable htUses = new Hashtable(); foreach( MethodComponent method in cls.Methods ) { int i = 0; foreach( LineModel line in method.Lines ) { CollectTemporaryFieldUses( htUses, cls, method, line, method.TextLines[i] ); i++; } } return htUses; }
public void Search( ClassComponent cls ) { if( cls.CodeClass.Children.Count > 0 ) { ClassHierarchy ch = new ClassHierarchy(); ch.Parent = cls.Name; foreach( EnvDTE.CodeClass child in cls.CodeClass.Children ) { ch.Children.Add( child.Name ); } m_htClassHierchs[ cls.CodeClass ] = ch; } foreach( ClassComponent inner in cls.InnerClasses ) { Search( inner ); } }
public ArrayList Search( ClassComponent cls ) { ArrayList list = new ArrayList(); foreach( MethodComponent method in cls.Methods ) { if( method.Lines.Count > this.MethodLength && method.NumConditionalStmts > this.ConditionalStmts && method.NumIterationStmts > this.IterationStmts ) { list.Add( method ); } } foreach( ClassComponent inner in cls.InnerClasses ) { list.AddRange( Search( inner ) ); } return list; }
public void Search( ClassComponent cls ) { foreach( MethodComponent method in cls.Methods ) { int i = 0; foreach( LineModel line in method.Lines ) { if( line.HasCode ) { string strLine = method.TextLines[i]; //MakeMessageChainComponent( strLine ); MakeChain( strLine ); } i++; } } foreach( ClassComponent inner in cls.InnerClasses ) { Search( inner ); } }
public void ProcessStuff( ClassComponent cls ) { foreach( MethodComponent method in cls.Methods ) { int i = 0; SwitchStatementComponent current = null; foreach( LineModel line in method.Lines ) { if( line.HasSwitch ) { string sw = method.TextLines[i]; int start = sw.IndexOf( "(" ) + 1; int end = sw.LastIndexOf( ")" ); string typeCode = sw.Substring( start, end - start ); if( ! m_htTypeCodes.ContainsKey( typeCode ) ) { m_htTypeCodes[ typeCode ] = new SwitchStatementComponent( method, typeCode ); } current = (SwitchStatementComponent)m_htTypeCodes[ typeCode ]; current.Count++; } if( line.HasCase && current != null && current.Count == 1) { current.CaseCount++; } i++; } } foreach( ClassComponent inner in cls.InnerClasses ) { ProcessStuff( inner ); } }
public TemporaryFieldComponent( ClassComponent unit, string name, string fullName ) : base( fullName, name ) { this.ClassComponent = unit; }
protected void CollectTemporaryFieldUses( Hashtable htUses, ClassComponent cls, MethodComponent m, LineModel line, string strLine ) { if( line.HasConditional ) { foreach( FieldComponent field in cls.Fields ) { if( strLine.IndexOf( field.Name ) > -1) { if( htUses[ field ] == null ) { htUses[ field ] = new ArrayList(); } if( ! ((ArrayList)htUses[ field ]).Contains( m ) ) { ((ArrayList)htUses[ field ]).Add( m ); } } } } }
protected void WalkElements( CodeElement cein, AbstractComponent parent ) { CodeElements ces; switch( cein.Kind ) { // Handle namespaces case EnvDTE.vsCMElement.vsCMElementNamespace: { CodeNamespace cn = (CodeNamespace) cein; ces = cn.Members; foreach (CodeElement ce in ces) WalkElements(ce, parent ); break; } // Handle classes case EnvDTE.vsCMElement.vsCMElementClass: { CodeClass cc = (CodeClass) cein; ClassComponent cls = new ClassComponent( cc.FullName, cc.Name ); cls.CodeClass = cc; parent.Visit( cls ); ces = cc.Members; foreach (CodeElement ce in ces) WalkElements(ce, cls ); break; } // Handle interfaces case EnvDTE.vsCMElement.vsCMElementInterface: { CodeInterface ci = (CodeInterface) cein; // nothing for now. break; } // Handle methods (functions) case EnvDTE.vsCMElement.vsCMElementFunction: { CodeFunction cf = (CodeFunction) cein; MethodComponent mc = new MethodComponent( cf.FullName, cf.Name ); parent.Visit( mc ); mc.CreateRepresentation( GetFunctionText( cf ) ); mc.CodeFunction = cf; break; } // Handle properties case EnvDTE.vsCMElement.vsCMElementProperty: { CodeProperty cp = (CodeProperty) cein; PropertyComponent pc = new PropertyComponent( cp.FullName, cp.Name ); parent.Visit( pc ); break; } // Handle fields (variables) case EnvDTE.vsCMElement.vsCMElementVariable: { CodeVariable cv = (CodeVariable) cein; FieldComponent fc = new FieldComponent( cv.FullName, cv.Name ); parent.Visit( fc ); break; } } }