/// <summary> /// Returns number of non primitive local variables in this method /// </summary> /// <param name="mAnalyzer"></param> /// <returns></returns> protected int GetNumOfNonPrimitiveVariables(MethodAnalyzer mAnalyzer) { int count = 0; foreach (var vb in mAnalyzer.VariablesInfo) { if (!mAnalyzer.IsPrimitiveType(vb.GetVariableType())) { count++; } } return(count); }
/// <summary> /// Gets number of modified non-primitive parameters /// </summary> /// <param name="mAnalyzer"></param> /// <returns></returns> protected int GetNumOfModifiedObjPara(MethodAnalyzer mAnalyzer) { int count = 0; foreach (var vb in mAnalyzer.ParametersInfo) { if (!mAnalyzer.IsPrimitiveType(vb.GetVariableType()) && vb.IsModified) { count++; } } return(count); }
/// <summary> /// Returns number of non primitive parameters in this method /// </summary> /// <param name="mAnalyzer"></param> /// <returns></returns> protected int GetNumOfNonPrimitiveParameters(MethodAnalyzer mAnalyzer) { int count = 0; foreach (var para in mAnalyzer.ParametersInfo) { if (!mAnalyzer.IsPrimitiveType(para.GetVariableType())) { count++; } } return(count); }
/// <summary> /// Classifies the given method /// </summary> /// <param name="node">The AnalyzedMethod to test</param> /// <returns>True if the node meets the conditions for this rule, False otherwise.</returns> protected override bool MakeClassification(MethodAnalyzer mAnalyzer) { // 1. Cannot be primitive type if (mAnalyzer.IsPrimitiveType(mAnalyzer.ReturnType)) { return(false); } // 2. Local varible is instantiated and returned. foreach (var vi in mAnalyzer.VariablesInfo) { if (vi.IsReturned == true && vi.IsInstantiated) { return(true); } } foreach (var vi in mAnalyzer.ParametersInfo) { if (vi.IsReturned == true && vi.IsInstantiated) { return(true); } } // 3. Create and return a new object directly if (mAnalyzer.IsReturnNewObj) { return(true); } //// *4. Parameter is instantiated in the method and it's not primitive type. //foreach(var vi in aMethod.ParametersInfo) { // if(!aMethod.IsPrimitiveType(vi.GetVariableType()) && vi.IsInstantiated) { // return true; // } //} // returns false if it could not pass all the cases. return(false); }