public static void EvaluateCohesion(ClassProperties cls) { double totalaccess = 0; foreach (var field in cls.Fields) totalaccess += field.Value.InternalAccessCount; cls.LCOM = 1 - (double)(totalaccess/(cls.Class.Methods.Count()*cls.Class.Fields.Count())); cls.LCOM_HS = (cls.Class.Methods.Count() - totalaccess/cls.Class.Fields.Count())/(cls.Class.Methods.Count()-1); }
public static void EvaluateCohesion(ClassProperties cls) { double totalaccess = 0; foreach (var field in cls.Fields) { totalaccess += field.Value.InternalAccessCount; } cls.LCOM = 1 - (double)(totalaccess / (cls.Class.MethodCount * cls.Class.FieldCount)); cls.LCOM_HS = (cls.Class.MethodCount - totalaccess / cls.Class.FieldCount) / (cls.Class.MethodCount - 1); }
private static ClassProperties RecursiveFindInstance (IType cls, ClassProperties prop) { foreach (var innercls in prop.InnerClasses) { var ret = RecursiveFindInstance (cls, innercls.Value); if (ret != null) return ret; } if (prop.Class.FullName == cls.FullName) return prop; return null; }
private void RecursiveProcessClasses(ClassProperties cls) { foreach (var innercls in cls.InnerClasses) { RecursiveProcessClasses(innercls.Value); cls.CyclometricComplexity += innercls.Value.CyclometricComplexity; cls.ClassCoupling += innercls.Value.ClassCoupling; cls.LOCReal += innercls.Value.LOCReal; cls.LOCComments += innercls.Value.LOCComments; cls.FieldCount += innercls.Value.FieldCount; cls.MethodCount += innercls.Value.MethodCount; } }
private bool RecursiveInstanceExists(ClassProperties cls, string clsName) { if (cls.InnerClasses.ContainsKey(clsName)) { return(true); } foreach (var innercls in cls.InnerClasses) { if (RecursiveInstanceExists(innercls.Value, clsName)) { return(true); } } return(false); }
private EnumProperties RecursiveGetEnumReference(ClassProperties cls, string key) { foreach (var innercls in cls.InnerClasses) { if (innercls.Value.InnerEnums.ContainsKey(key)) { return(innercls.Value.InnerEnums[key]); } var ret = RecursiveGetEnumReference(innercls.Value, key); if (ret != null) { return(ret); } } return(null); }
private ClassProperties RecursiveFindRefCls(ClassProperties cls, string key) { if (cls.InnerClasses.ContainsKey(key)) { return(cls.InnerClasses[key]); } foreach (var innercls in cls.InnerClasses) { var ret = RecursiveFindRefCls(innercls.Value, key); if (ret != null) { return(ret); } } return(null); }
private MethodProperties RecursiveFindRefMeth(ClassProperties cls, string key) { foreach (var innercls in cls.InnerClasses) { if (innercls.Value.Methods.ContainsKey(key)) { return(innercls.Value.Methods[key]); } var ret = RecursiveFindRefMeth(innercls.Value, key); if (ret != null) { return(ret); } } return(null); }
private StructProperties RecursiveGetStructReference(ClassProperties cls, string key) { if (cls.InnerClasses.ContainsKey(key)) { return(cls.InnerStructs[key]); } foreach (var innercls in cls.InnerClasses) { var ret = RecursiveGetStructReference(innercls.Value, key); if (ret != null) { return(ret); } } return(null); }
private static ClassProperties RecursiveFindInstance(IType cls, ClassProperties prop) { foreach (var innercls in prop.InnerClasses) { var ret = RecursiveFindInstance(cls, innercls.Value); if (ret != null) { return(ret); } } if (prop.Class.FullName == cls.FullName) { return(prop); } return(null); }
private static void ClassEvaluateInheritanceTree (MetricsContext ctx, ClassProperties cls) { foreach (IType ob in cls.Class.SourceProjectDom.GetInheritanceTree (cls.Class)) { if (ob.ClassType == MonoDevelop.Projects.Dom.ClassType.Class && ob != cls.Class && ob.Name!="Object") { cls.DepthOfInheritance++; ClassProperties tmp = ctx.GetInstanceOf (ob); // lock tmp here if(tmp != null) { tmp.FanOut++; cls.InheritedFieldCount += tmp.FieldCount; cls.InheritedMethodCount += tmp.MethodCount; if (ob.IsAbstract) cls.DataAbstractionCoupling++; } } foreach (var innercls in cls.InnerClasses) { ClassEvaluateInheritanceTree (ctx, innercls.Value); } } }
private static void ClassEvaluateInheritanceTree (MetricsContext ctx, ClassProperties cls) { foreach (var ob in cls.Class.GetAllBaseTypeDefinitions ()) { if (ob.Kind == TypeKind.Class && ob != cls.Class && ob.Name!="Object") { cls.DepthOfInheritance++; ClassProperties tmp = ctx.GetInstanceOf (ob); // lock tmp here if(tmp != null) { tmp.FanOut++; cls.InheritedFieldCount += tmp.FieldCount; cls.InheritedMethodCount += tmp.MethodCount; if (ob.IsAbstract) cls.DataAbstractionCoupling++; } } foreach (var innercls in cls.InnerClasses) { ClassEvaluateInheritanceTree (ctx, innercls.Value); } } }
private static StringBuilder GenerateClassMetricText(ClassProperties item) { StringBuilder results = new StringBuilder(); results.Append(GettextCatalog.GetString("\nName : ") + item.FullName); results.Append(GettextCatalog.GetString("\nDepth of inheritance : ") + item.DepthOfInheritance); results.Append(GettextCatalog.GetString("\nNumber of children : ") + item.FanOut); results.Append(GettextCatalog.GetString("\nAfferent Coupling : ") + item.AfferentCoupling); results.Append(GettextCatalog.GetString("\nEfferent Coupling : ") + item.EfferentCoupling); results.Append(GettextCatalog.GetString("\nData abstraction coupling : ") + item.DataAbstractionCoupling); results.Append(GettextCatalog.GetString("\nConstructors : ") + item.ConstructorCount); results.Append(GettextCatalog.GetString("\nDelegates : ") + item.DelegateCount); results.Append(GettextCatalog.GetString("\nEvents : ") + item.EventCount); results.Append(GettextCatalog.GetString("\nFields : ") + item.FieldCount); results.Append(GettextCatalog.GetString("\nInner classes : ") + item.InnerClassCount); results.Append(GettextCatalog.GetString("\nStructs : ") + item.StructCount); results.Append(GettextCatalog.GetString("\nMethods : ") + item.MethodCount); results.Append(GettextCatalog.GetString("\nProperties : ") + item.Class.PropertyCount); results.Append(GettextCatalog.GetString("\nLack of cohesion of methods : ") + item.LCOM); results.Append(GettextCatalog.GetString("\nLack of cohesion of methods (Henderson-Sellers) : ") + item.LCOM_HS); return(results); }
public MethodProperties(ICSharpCode.OldNRefactory.Ast.INode m, ClassProperties prop) { mthd = null; ParameterList = new List <string> (0); if (m is MethodDeclaration) { mthdAst = (MethodDeclaration)m; VisitMethodMember((MethodDeclaration)m, prop); this.FullName = prop.FullName + "." + ((MethodDeclaration)m).Name.Substring(((MethodDeclaration)m).Name.LastIndexOf(".") + 1); } else if (m is ConstructorDeclaration) { mthdAst = (ConstructorDeclaration)m; VisitConstructorMember((ConstructorDeclaration)m, prop); this.FullName = prop.FullName + "." + ((ConstructorDeclaration)m).Name.Substring(((ConstructorDeclaration)m).Name.LastIndexOf(".") + 1); } AfferentCoupling = 0; EfferentCoupling = 0; FilePath = ""; this.ParentClass = prop; this.StartLine = mthdAst.StartLocation.Line; this.EndLine = mthdAst.EndLocation.Line; }
private static StringBuilder GenerateClassMetricText(ClassProperties item) { StringBuilder results = new StringBuilder(); results.Append(GettextCatalog.GetString("\nName : ") + item.FullName); results.Append(GettextCatalog.GetString("\nDepth of inheritance : ") + item.DepthOfInheritance); results.Append(GettextCatalog.GetString("\nNumber of children : ") + item.FanOut); results.Append(GettextCatalog.GetString("\nAfferent Coupling : ") + item.AfferentCoupling); results.Append(GettextCatalog.GetString("\nEfferent Coupling : ") + item.EfferentCoupling); results.Append(GettextCatalog.GetString("\nData abstraction coupling : ") + item.DataAbstractionCoupling); results.Append(GettextCatalog.GetString("\nConstructors : ") + item.ConstructorCount); results.Append(GettextCatalog.GetString("\nDelegates : ") + item.DelegateCount); results.Append(GettextCatalog.GetString("\nEvents : ") + item.EventCount); results.Append(GettextCatalog.GetString("\nFields : ") + item.FieldCount); results.Append(GettextCatalog.GetString("\nInner classes : ") + item.InnerClassCount); results.Append(GettextCatalog.GetString("\nStructs : ") + item.StructCount); results.Append(GettextCatalog.GetString("\nMethods : ") + item.MethodCount); results.Append(GettextCatalog.GetString("\nProperties : ") + item.Class.PropertyCount); results.Append(GettextCatalog.GetString("\nLack of cohesion of methods : ") + item.LCOM); results.Append(GettextCatalog.GetString("\nLack of cohesion of methods (Henderson-Sellers) : ") + item.LCOM_HS); return results; }
public void VisitMethodMember(MethodDeclaration node, ClassProperties prop) { foreach(var param in node.Parameters) { ParameterList.Add(param.Type.ToString ()); } this.StartLine = node.Body.StartLocation.Line; this.EndLine = node.Body.EndLocation.Line; }
public MethodProperties (ICSharpCode.OldNRefactory.Ast.INode m, ClassProperties prop) { mthd=null; ParameterList = new List<string> (0); if(m is MethodDeclaration) { mthdAst = (MethodDeclaration)m; VisitMethodMember((MethodDeclaration)m, prop); this.FullName = prop.FullName + "." + ((MethodDeclaration)m).Name.Substring(((MethodDeclaration)m).Name.LastIndexOf(".")+1); } else if(m is ConstructorDeclaration) { mthdAst = (ConstructorDeclaration)m; VisitConstructorMember((ConstructorDeclaration)m, prop); this.FullName = prop.FullName + "." + ((ConstructorDeclaration)m).Name.Substring(((ConstructorDeclaration)m).Name.LastIndexOf(".")+1); } AfferentCoupling=0; EfferentCoupling=0; FilePath=""; this.ParentClass = prop; this.StartLine = mthdAst.StartLocation.Line; this.EndLine = mthdAst.EndLocation.Line; }
public void VisitConstructorMember(ConstructorDeclaration node, ClassProperties prop) { foreach(var param in node.Parameters) { ParameterList.Add(param.TypeReference.Type); } this.StartLine = node.Body.StartLocation.Line; this.EndLine = node.Body.EndLocation.Line; }
private bool RecursiveInstanceExists(ClassProperties cls, string clsName) { if(cls.InnerClasses.ContainsKey(clsName)) return true; foreach(var innercls in cls.InnerClasses) { if(RecursiveInstanceExists(innercls.Value, clsName)) return true; } return false; }
private StructProperties RecursiveGetStructReference (ClassProperties cls, string key) { if(cls.InnerClasses.ContainsKey(key)) return cls.InnerStructs[key]; foreach (var innercls in cls.InnerClasses) { var ret = RecursiveGetStructReference (innercls.Value, key); if(ret!=null) return ret; } return null; }
private EnumProperties RecursiveGetEnumReference (ClassProperties cls, string key) { foreach (var innercls in cls.InnerClasses) { if(innercls.Value.InnerEnums.ContainsKey(key)) return innercls.Value.InnerEnums[key]; var ret = RecursiveGetEnumReference (innercls.Value, key); if(ret!=null) return ret; } return null; }
private ClassProperties RecursiveFindRefCls (ClassProperties cls, string key) { if(cls.InnerClasses.ContainsKey(key)) return cls.InnerClasses[key]; foreach (var innercls in cls.InnerClasses) { var ret = RecursiveFindRefCls (innercls.Value, key); if(ret!=null) return ret; } return null; }
private MethodProperties RecursiveFindRefMeth (ClassProperties cls, string key) { foreach(var innercls in cls.InnerClasses) { if(innercls.Value.Methods.ContainsKey(key)) return innercls.Value.Methods[key]; var ret = RecursiveFindRefMeth(innercls.Value, key); if(ret!=null) return ret; } return null; }
internal static void EvaluateComplexityMetrics (ICSharpCode.NRefactory.Ast.INode method, MethodProperties props) { props.CyclometricComplexity = 1; props.LOCReal=0; props.NumberOfVariables=0; cls = props.ParentClass; ASTVisitor ctxAstVisitor = new ASTVisitor(); if(method is MethodDeclaration) { foreach (var statement in ((MethodDeclaration)method).Body.Children) { ctxAstVisitor.VisitStatement(statement, props); } } else if (method is ConstructorDeclaration) { foreach (var statement in ((ConstructorDeclaration)method).Body.Children) { ctxAstVisitor.VisitStatement(statement, props); } } cls.CyclometricComplexity += props.CyclometricComplexity; }
private void RecursiveProcessClasses(ClassProperties cls) { foreach(var innercls in cls.InnerClasses) { RecursiveProcessClasses(innercls.Value); cls.CyclometricComplexity += innercls.Value.CyclometricComplexity; cls.ClassCoupling += innercls.Value.ClassCoupling; cls.LOCReal += innercls.Value.LOCReal; cls.LOCComments += innercls.Value.LOCComments; cls.FieldCount += innercls.Value.FieldCount; cls.MethodCount += innercls.Value.MethodCount; } }