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 );
			}
		}
Example #3
0
		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 );
			}
		}
Example #6
0
		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;
		}
Example #7
0
		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 );
						}
					}
				}
			}
		}
Example #11
0
		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;
				}
			}
		}