Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        /// <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;
        }
Ejemplo n.º 6
0
        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();
            }
        }
Ejemplo n.º 7
0
 public void ClassSetup() {
     fileUnitSetup = new SrcMLFileUnitSetup(Language.CPlusPlus);
     builder = new UnigramSwumBuilder();
 }
Ejemplo n.º 8
0
        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);
        }
Ejemplo n.º 9
0
 public void ClassSetup()
 {
     fileUnitSetup = new SrcMLFileUnitSetup(Language.CPlusPlus);
     builder       = new UnigramSwumBuilder();
 }