public void SetUp() { builder = new UnigramSwumBuilder { Splitter = new CamelIdSplitter() }; var Generator = new SrcMLGenerator(@"..\..\External\SrcML"); var file = Generator.GenerateSrcMLFileFromDirectory(@"..\..\", Path.GetTempFileName(), new List<string>(), Language.Any); functions = from func in file.GetXDocument().Descendants() where _functionTypes.Contains(func.Name) && !func.Ancestors(SRC.Declaration).Any() select func; }
public void SetUp() { builder = new UnigramSwumBuilder { Splitter = new CamelIdSplitter() }; var Generator = new SrcMLGenerator(@"..\..\External\SrcML"); var file = Generator.GenerateSrcMLFileFromDirectory(@"..\..\", Path.GetTempFileName(), new List <string>(), Language.Any); functions = from func in file.GetXDocument().Descendants() where _functionTypes.Contains(func.Name) && !func.Ancestors(SRC.Declaration).Any() select func; }
public void TestGetParse() { MethodContext mc = new MethodContext("int", true, "MyClass", null, true, false, false); MethodDeclarationNode mdn = new MethodDeclarationNode("CalcNewValue", mc); UnigramSwumBuilder builder = new UnigramSwumBuilder(); builder.ApplyRules(mdn); var parsedName = mdn.GetParse(); Assert.AreEqual(3, parsedName.Size()); Assert.AreEqual("Calc", parsedName[0].Text); Assert.AreEqual(PartOfSpeechTag.Verb, parsedName[0].Tag); Assert.AreEqual("New", parsedName[1].Text); Assert.AreEqual(PartOfSpeechTag.NounModifier, parsedName[1].Tag); Assert.AreEqual("Value", parsedName[2].Text); Assert.AreEqual(PartOfSpeechTag.NounIgnorable, parsedName[2].Tag); }
public override void Execute() { Console.WriteLine("Using srcML file {0}", this.File); UnigramSwumBuilder builder = new UnigramSwumBuilder(); if (CountFile != null) { Console.WriteLine("Initializing SamuraiIdSplitter using word count file {0}", this.CountFile); builder.Splitter = new SamuraiIdSplitter(CountFile); } Console.WriteLine("SwumBuilder initialized"); if (this.SamplePercent <= 0) { this.SamplePercent = 100; } Random rand = new Random(); SrcMLFile testFile = new SrcMLFile(this.File); int methodCount = 0; var functionTypes = new XName[] { SRC.Function, SRC.Constructor, SRC.Destructor }; foreach (XElement file in testFile.FileUnits) { Console.WriteLine("File {0}:", file.Attribute("filename").Value); //print all the function names foreach (var func in (from func in file.Descendants() where functionTypes.Any(c => c == func.Name) && !func.Ancestors(SRC.Declaration).Any() && (rand.Next(100) < this.SamplePercent) select func)) { string funcName = SrcMLElement.GetNameForMethod(func).Value; Console.WriteLine("<{0}> {1}", func.Name.LocalName, GetMethodSignature(func)); MethodDeclarationNode mdn = new MethodDeclarationNode(funcName, ContextBuilder.BuildMethodContext(func)); builder.ApplyRules(mdn); Console.WriteLine(mdn.ToString() + Environment.NewLine); methodCount++; } } Console.WriteLine("{0} functions analyzed", methodCount); }
/// <summary> /// Construct the method summarizer /// </summary> /// <param name="md"></param> public SwumSummary(MethodDefinition md) { this.Method = md; var classBelong = md.GetAncestors <TypeDefinition>().FirstOrDefault(); //class name if (classBelong != null) { ClassName = classBelong.Name; } else { ClassName = ""; } //return type string returnType = "void"; if (md.ReturnType != null) { returnType = md.ReturnType.ToString(); } //Check if md returns primitive bool IsPrimitive = IsPrimitiveType(md.ReturnType); HashSet <FormalParameterRecord> paras = new HashSet <FormalParameterRecord>(); foreach (var para in md.Parameters) { var vType = para.VariableType; var tempPara = new FormalParameterRecord(vType.ToString(), BuiltInTypeFactory.IsBuiltIn(vType), para.Name); paras.Add(tempPara); } MethodContext mc = new MethodContext(returnType, IsPrimitive, ClassName, paras, false, md.IsConstructor, md.IsDestructor); this._mDeclarationNode = new MethodDeclarationNode(md.Name, mc); this._builder = new UnigramSwumBuilder(); this.IsSummarized = false; }
public override void Execute() { if (Pause) { Console.WriteLine("Ready to begin (press Enter)"); Console.ReadLine(); } Console.WriteLine("Using srcML file {0}", this.File); var builder = new UnigramSwumBuilder(); if (!string.IsNullOrWhiteSpace(CountFile)) { Console.WriteLine("Initializing SamuraiIdSplitter using word count file {0}", this.CountFile); builder.Splitter = new SamuraiIdSplitter(CountFile); } Console.WriteLine("SwumBuilder initialized"); int methodCount = 0, fieldCount = 0; { SrcMLFile testFile = new SrcMLFile(this.File); var functionTypes = new XName[] { SRC.Function, SRC.Constructor, SRC.Destructor }; foreach (XElement file in testFile.FileUnits) { string fileName = file.Attribute("filename").Value; Console.WriteLine("File {0}:", fileName); //compute SWUM on each function foreach (var func in (from func in file.Descendants() where functionTypes.Contains(func.Name) && !func.Ancestors(SRC.Declaration).Any() select func)) { var nameElement = SrcMLElement.GetNameForMethod(func); if (nameElement != null) { string funcName = nameElement.Value; string funcSignature = SrcMLElement.GetMethodSignature(func); if (PrintSwum) { Console.WriteLine("<{0}> {1}", func.Name.LocalName, funcSignature); } MethodDeclarationNode mdn = new MethodDeclarationNode(funcName, ContextBuilder.BuildMethodContext(func)); builder.ApplyRules(mdn); methodSwum[string.Format("{0}:{1}", fileName, funcSignature)] = mdn; if (PrintSwum) { Console.WriteLine(mdn.ToString() + Environment.NewLine); } methodCount++; } } //compute SWUM on each field foreach (var fieldDecl in (from declStmt in file.Descendants(SRC.DeclarationStatement) where !declStmt.Ancestors().Any(n => functionTypes.Contains(n.Name)) select declStmt.Element(SRC.Declaration))) { int declPos = 1; foreach (var nameElement in fieldDecl.Elements(SRC.Name)) { string fieldName = nameElement.Elements(SRC.Name).Any() ? nameElement.Elements(SRC.Name).Last().Value : nameElement.Value; if (PrintSwum) { Console.WriteLine("Field: {0}, Name: {1}", fieldDecl.Value, fieldName); } FieldDeclarationNode fdn = new FieldDeclarationNode(fieldName, ContextBuilder.BuildFieldContext(fieldDecl)); builder.ApplyRules(fdn); fieldSwum[string.Format("{0}:{1}:{2}", fileName, fieldDecl.Value, declPos)] = fdn; if (PrintSwum) { Console.WriteLine(fdn.ToString() + Environment.NewLine); } fieldCount++; declPos++; } } } } GC.Collect(); Console.WriteLine("{0} functions analyzed", methodCount); Console.WriteLine("{0} functions in dictionary", methodSwum.Count); Console.WriteLine("{0} fields analyzed", fieldCount); Console.WriteLine("{0} fields in dictionary", fieldSwum.Count); if (Pause) { Console.WriteLine("Finished building SWUM (press Enter)"); Console.ReadLine(); } }
public void ClassSetup() { fileUnitSetup = new SrcMLFileUnitSetup(Language.CPlusPlus); builder = new UnigramSwumBuilder(); }
public void TestGetParse() { MethodContext mc = new MethodContext("int", true, "MyClass", null, true, false, false); MethodDeclarationNode mdn = new MethodDeclarationNode("CalcNewValue", mc); UnigramSwumBuilder builder = new UnigramSwumBuilder(); builder.ApplyRules(mdn); var parsedName = mdn.GetParse(); Assert.AreEqual(3, parsedName.Size()); Assert.AreEqual("Calc", parsedName[0].Text); Assert.AreEqual(PartOfSpeechTag.Verb, parsedName[0].Tag); Assert.AreEqual("New", parsedName[1].Text); Assert.AreEqual(PartOfSpeechTag.NounModifier, parsedName[1].Tag); Assert.AreEqual("Value", parsedName[2].Text); Assert.AreEqual(PartOfSpeechTag.NounIgnorable, parsedName[2].Tag); }
public void ClassSetup() { fileUnitSetup = new SrcMLFileUnitSetup(Language.CPlusPlus); builder = new UnigramSwumBuilder(); }