示例#1
0
        public static ClassElement RetrieveClassElement(XElement field, List <ProgramElement> programElements)
        {
            IEnumerable <XElement> ownerClasses =
                from el in field.Ancestors(SRC.Class)
                select el;

            if (ownerClasses.Count() > 0)
            {
                //this ignores the possibility that a field may be part of an inner class
                XElement name           = ownerClasses.First().Element(SRC.Name);
                string   ownerClassName = "";
                if (name == null)
                {
                    ownerClassName = "anonymous";
                }
                else
                {
                    ownerClassName = name.Value;
                }
                //now find the ClassElement object corresponding to ownerClassName, since those should have been gen'd by now
                ProgramElement ownerClass = programElements.Find(element => element is ClassElement && ((ClassElement)element).Name == ownerClassName);
                return(ownerClass as ClassElement);
            }
            else
            {
                //field is not contained by a class
                return(null);
            }
        }
示例#2
0
        public static SandoDocument Create(ProgramElement programElement)
        {
            Contract.Requires(programElement != null, "DocumentFactory:Create - programElement cannot be null!");
            Contract.Ensures(Contract.Result <SandoDocument>() != null, "DocumentFactory:Create - an object must be returned from this method!");

            if (programElement as ClassElement != null)
            {
                return(new ClassDocument(programElement as ClassElement));
            }
            if (programElement as CommentElement != null)
            {
                return(new CommentDocument(programElement as CommentElement));
            }
            if (programElement as EnumElement != null)
            {
                return(new EnumDocument(programElement as EnumElement));
            }
            if (programElement as FieldElement != null)
            {
                return(new FieldDocument(programElement as FieldElement));
            }
            if (programElement as MethodElement != null)
            {
                return(new MethodDocument(programElement as MethodElement));
            }
            if (programElement as MethodPrototypeElement != null)
            {
                return(new MethodPrototypeDocument(programElement as MethodPrototypeElement));
            }
            if (programElement as PropertyElement != null)
            {
                return(new PropertyDocument(programElement as PropertyElement));
            }
            if (programElement as StructElement != null)
            {
                return(new StructDocument(programElement as StructElement));
            }
            if (programElement as TextLineElement != null)
            {
                return(new TextLineDocument(programElement as TextLineElement));
            }
            if (programElement as XmlXElement != null)
            {
                return(new XmlXElementDocument(programElement as XmlXElement));
            }

            if (programElement.GetCustomProperties().Count > 0)
            {
                return(new SandoDocument(programElement));
            }

            //if this code is reached, contract will fail
            return(null);
        }
示例#3
0
        public override Element VisitProgram(SqlParser.ProgramContext context)
        {
            var program = new ProgramElement(CreateParseInfo(context));

            for (var i = 0; i < context.ChildCount; i++)
            {
                program.Children.Add(Visit(context.GetChild(i)));
            }

            return(program);
        }
示例#4
0
        public static SandoDocument Create(ProgramElement programElement)
        {
            Contract.Requires(programElement != null, "DocumentFactory:Create - programElement cannot be null!");
            Contract.Ensures(Contract.Result<SandoDocument>() != null, "DocumentFactory:Create - an object must be returned from this method!");

            if(programElement as ClassElement != null)
            {
                return new ClassDocument(programElement as ClassElement);
            }
            if(programElement as CommentElement != null)
            {
                return new CommentDocument(programElement as CommentElement);
            }
            if(programElement as EnumElement != null)
            {
                return new EnumDocument(programElement as EnumElement);
            }
            if(programElement as FieldElement != null)
            {
                return new FieldDocument(programElement as FieldElement);
            }
            if(programElement as MethodElement != null)
            {
                return new MethodDocument(programElement as MethodElement);
            }
            if(programElement as MethodPrototypeElement != null)
            {
                return new MethodPrototypeDocument(programElement as MethodPrototypeElement);
            }
            if(programElement as PropertyElement != null)
            {
                return new PropertyDocument(programElement as PropertyElement);
            }
            if (programElement as StructElement != null)
            {
                return new StructDocument(programElement as StructElement);
            }
            if(programElement as TextFileElement != null)
            {
                return new TextFileDocument(programElement as TextFileElement);
            }
            if (programElement as XmlXElement!= null)
            {
                return new XmlXElementDocument(programElement as XmlXElement);
            }

            if(programElement.GetCustomProperties().Count>0)
            {
                return new SandoDocument(programElement);
            }

            //if this code is reached, contract will fail
            return null;
        }
 public void DocumentFactory_CreateReturnsMethodDocumentForValidMethodElement()
 {
     try
     {
         ProgramElement programElement = SampleProgramElementFactory.GetSampleMethodElement();
         SandoDocument  sandoDocument  = DocumentFactory.Create(programElement);
         Assert.True(sandoDocument != null, "Null returned from DocumentFactory!");
         Assert.True(sandoDocument is MethodDocument, "MethodDocument must be returned for MethodElement object!");
     }
     catch (Exception ex)
     {
         Assert.Fail(ex.Message + ". " + ex.StackTrace);
     }
 }
        private bool ResolveClassId(string className, ProgramElement[] includeElements, out Guid outGuid)
        {
            foreach(ProgramElement element in includeElements)
            {
                if(element is ClassElement && element.Name == ClassName)
                {
                    outGuid = ((ClassElement)element).Id;
                    return true;
                }
            }

            outGuid = Guid.Empty;
            return false;
        }
        private bool ResolveAccessType(string funcName, ProgramElement[] includeElements, out AccessLevel outAccessLevel)
        {
            foreach(ProgramElement element in includeElements)
            {
                if(element is MethodPrototypeElement && element.Name == funcName)
                {
                    outAccessLevel = ((MethodPrototypeElement)element).AccessLevel;
                    return true;
                }
            }

            outAccessLevel = AccessLevel.Protected;
            return false;
        }
        public bool TryResolve(ProgramElement[] headerElements, out MethodElement outMethodElement)
        {
            AccessLevel accessLevel;
            Guid classId;

            outMethodElement = null;
            if(ResolveClassId(ClassName, headerElements, out classId) == false) return false;
            if(ResolveAccessType(Name, headerElements, out accessLevel) == false) return false;

            IsResolved = true;
            outMethodElement = new MethodElement(Name, DefinitionLineNumber, FullFilePath, Snippet, accessLevel, Arguments, ReturnType, Body,
                                                    classId, ClassName, String.Empty, IsConstructor);
            return true;
        }
示例#9
0
 public static string DescribeQueryProgramElementMatch(ProgramElement progElem, string query)
 {
     if (progElem.Name.Contains(query))
     {
         return "NameContainsQuery";
     }
     else if (progElem.RawSource.Contains(query))
     {
         return "RawSourceContainsQuery";
     }
     else
     {
         return "QueryNotInNameOrRawSource";
     }
 }
示例#10
0
 public static string DescribeQueryProgramElementMatch(ProgramElement progElem, string query)
 {
     if (progElem.Name.Contains(query))
     {
         return("NameContainsQuery");
     }
     else if (progElem.RawSource.Contains(query))
     {
         return("RawSourceContainsQuery");
     }
     else
     {
         return("QueryNotInNameOrRawSource");
     }
 }
示例#11
0
        public static StructElement RetrieveStructElement(XElement field, List <ProgramElement> programElements)
        {
            IEnumerable <XElement> ownerStructs =
                from el in field.Ancestors(SRC.Struct)
                select el;

            if (ownerStructs.Count() > 0)
            {
                XElement name            = ownerStructs.First().Element(SRC.Name);
                string   ownerStructName = name.Value;
                //now find the StructElement object corresponding to ownerClassName, since those should have been gen'd by now
                ProgramElement ownerStruct = programElements.Find(element => element is StructElement && ((StructElement)element).Name == ownerStructName);
                return(ownerStruct as StructElement);
            }
            else
            {
                //field is not contained by a class
                return(null);
            }
        }
示例#12
0
        public static MethodElement RetrieveMethodElement(XElement field, List <ProgramElement> programElements)
        {
            IEnumerable <XElement> ownerMethods =
                from el in field.Ancestors(SRC.Function)
                select el;

            ownerMethods.Union(from el in field.Ancestors(SRC.Constructor) select el);

            if (ownerMethods.Count() > 0)
            {
                XElement name            = ownerMethods.First().Element(SRC.Name);
                string   ownerMethodName = name.Value;
                //now find the MethodElement object corresponding to ownerMethodName, since those should have been gen'd by now
                ProgramElement ownerMethod = programElements.Find(element => element is MethodElement && ((MethodElement)element).Name == ownerMethodName);
                return(ownerMethod as MethodElement);
            }
            else
            {
                //field is not contained by a method
                return(null);
            }
        }
示例#13
0
        public void Visit(ProgramElement program)
        {
            using (var s = _scope.Push())
            {
                _scope.AddTable("airlineflightschedules", new AirlineFlightScheduleQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(AirlineFlightSchedule))));
                _scope.AddTable("getflightid", new GetFlightIdQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(GetFlightId))));
                _scope.AddTable("flightinfoex", new FlightInfoExQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(FlightInfoEx))));
                _scope.AddTable("airportinfo", new AirportInfoQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(AirportInfo))));
                _scope.AddTable("airlineinfo", new AirlineInfoQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(AirlineInfo))));
                _scope.AddTable("inboundflightinfo", new InboundFlightInfoQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(InboundFlightInfo))));
                _scope.AddTable("inflightinfo", new InFlightInfoQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(InFlightInfo))));
                _scope.AddTable("scheduled", new ScheduledQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(Scheduled))));
                _scope.AddTable("arrived", new ArrivedQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(Arrived))));
                _scope.AddTable("gethistoricaltrack", new GetHistoricalTrackQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(GetHistoricalTrack))));
                _scope.AddTable("enroute", new EnrouteQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(Enroute))));
                _scope.AddTable("departed", new DepartedQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(Departed))));
                _scope.AddTable("mapflight", new MapFlightQueryTable(_httpExecutor, PropertyDescriptor.GenerateQueryDescriptor(typeof(MapFlight))));

                foreach (var c in program.Statements)
                {
                    VisitChild(c);
                }
            }
        }
示例#14
0
 private static IEnumerable <string> ExtractUnknownElementWords(ProgramElement element)
 {
     return(GetDefaultLetterWords(element.RawSource));
 }
示例#15
0
 public XmlXElementDocument(ProgramElement programElement) : base(programElement)
 {
 }
示例#16
0
 public NoSearchResults(ProgramElement programElement, double score) : base(programElement, score)
 {
 }
示例#17
0
 public CodeSearchResult(ProgramElement programElement, double score)
 {
     ProgramElement = programElement;
     Score          = score;
 }
示例#18
0
 public CodeSearchResult(ProgramElement programElement, double score)
 {
     ProgramElement = programElement;
     Score = score;
 }
 public XmlXElementDocument(ProgramElement programElement)
     : base(programElement)
 {
 }
        /// <summary>
        /// Returns order for program element in specified day.
        /// </summary>
        /// <param name="programElement"></param>
        /// <param name="dayNumber"></param>
        /// <returns></returns>
        private static int GetOrderForDay(ProgramElement programElement, int dayNumber)
        {
            var day = programElement.ProgramDayElements.First(d => d.Day == dayNumber);

            return(day.Sort ?? programElement.Sort);
        }
示例#21
0
 public SandoDocument(ProgramElement programElement)
 {
     this.programElement = programElement;
 }
 private ConverterFromProgramElementToDocument(ProgramElement programElement, SandoDocument sandoDocument)
 {
     this.programElement = programElement;
     this.sandoDocument = sandoDocument;
 }
示例#23
0
 public SandoDocument(ProgramElement programElement)
 {
     this.programElement = programElement;
 }
示例#24
0
        public static IEnumerable <String> ExtractElementWords(ProgramElement element)
        {
            var list = new List <string>();

            if (element as ClassElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractClassWords(element as ClassElement));
                return(list);
            }
            if (element as CommentElement != null)
            {
                list.AddRange(ExtractCommentWords(element as CommentElement));
                return(list);
            }
            if (element as FieldElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractFieldWords(element as FieldElement));
                return(list);
            }
            if (element as MethodElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractMethodWords(element as MethodElement));
                return(list);
            }
            if (element as MethodPrototypeElement != null)
            {
                list.AddRange(ExtractMethodPrototypeWords(element as MethodPrototypeElement));
                return(list);
            }
            if (element as PropertyElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractPropertyWords(element as PropertyElement));
                return(list);
            }
            if (element as StructElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractStructWords(element as StructElement));
                return(list);
            }
            if (element as TextLineElement != null)
            {
                list.AddRange(ExtractTextLineElement(element as TextLineElement));
                return(list);
            }
            if (element as XmlXElement != null)
            {
                list.AddRange(ExtractXmlWords(element as XmlXElement));
                return(list);
            }

            if (element.GetCustomProperties().Count > 0)
            {
                list.AddRange(ExtractUnknownElementWords(element));
                return(list);
            }
            list.Clear();
            return(list);
        }
示例#25
0
        private static void AddElementName(ProgramElement element, List <string> list)
        {
            var name = NormalizeText(element.Name);

            list.Add(name);
        }
 internal static ConverterFromProgramElementToDocument Create(ProgramElement programElement, SandoDocument sandoDocument)
 {
     return(new ConverterFromProgramElementToDocument(programElement, sandoDocument));
 }
示例#27
0
 private static void AddElementName(ProgramElement element, List<string> list)
 {
     var name = NormalizeText(element.Name);
     list.Add(name);
 }
示例#28
0
 private static IEnumerable<string> ExtractUnknownElementWords(ProgramElement element)
 {
     return GetDefaultLetterWords(element.RawSource);
 }
示例#29
0
        public static void ParseComments(List <ProgramElement> programElements, XElement elements, string fileName)
        {
            IEnumerable <XElement> comments =
                from el in elements.Descendants(SRC.Comment)
                select el;

            List <List <XElement> > commentGroups = new List <List <XElement> >();
            List <XElement>         lastGroup     = null;

            foreach (var aComment in comments)
            {
                if (lastGroup != null)
                {
                    int line     = Int32.Parse(lastGroup.Last().Attribute(POS.Line).Value);
                    int linenext = Int32.Parse(aComment.Attribute(POS.Line).Value);
                    if (line + 1 == linenext)
                    {
                        lastGroup.Add(aComment);
                    }
                    else
                    {
                        var xElements = new List <XElement>();
                        xElements.Add(aComment);
                        commentGroups.Add(xElements);
                        lastGroup = xElements;
                    }
                }
                else
                {
                    var xElements = new List <XElement>();
                    xElements.Add(aComment);
                    commentGroups.Add(xElements);
                    lastGroup = xElements;
                }
            }


            foreach (var oneGroup in commentGroups)
            {
                try
                {
                    var comment                = oneGroup.First();
                    var commentText            = GetCommentText(oneGroup);
                    int commentLine            = Int32.Parse(comment.Attribute(POS.Line).Value);
                    int definitionColumnNumber = Int32.Parse(comment.Attribute(POS.Column).Value);
                    if (String.IsNullOrWhiteSpace(commentText))
                    {
                        continue;
                    }

                    //comment name doesn't contain non-word characters and is compact-er than its body
                    var commentName = "";
                    commentName = GetCommentSummary(GetCommentText(oneGroup, true));
                    if (string.IsNullOrWhiteSpace(commentName))
                    {
                        continue;
                    }

                    //comments above method or class
                    var            lastComment    = oneGroup.Last() as XElement;
                    ProgramElement programElement = null;
                    if (lastComment != null && lastComment.Attribute(POS.Line) != null)
                    {
                        var definitionLineNumber = Int32.Parse(lastComment.Attribute(POS.Line).Value);
                        programElement =
                            programElements.Find(element => element.DefinitionLineNumber == definitionLineNumber + 1);
                    }
                    if (programElement != null)
                    {
                        programElements.Add(new CommentElement(commentName, commentLine, definitionColumnNumber, programElement.FullFilePath, RetrieveSource(commentText), commentText));
                        continue;
                    }



                    //comments inside a method or class
                    MethodElement methodEl = RetrieveMethodElement(comment, programElements);
                    if (methodEl != null)
                    {
                        programElements.Add(new CommentElement(commentName, commentLine, definitionColumnNumber, methodEl.FullFilePath, RetrieveSource(commentText), commentText));
                        continue;
                    }
                    ClassElement classEl = RetrieveClassElement(comment, programElements);
                    if (classEl != null)
                    {
                        programElements.Add(new CommentElement(commentName, commentLine, definitionColumnNumber, classEl.FullFilePath, RetrieveSource(commentText), commentText));
                        continue;
                    }

                    //comments is not associated with another element, so it's a plain CommentElement
                    programElements.Add(new CommentElement(commentName, commentLine, definitionColumnNumber, fileName, RetrieveSource(commentText), commentText));
                }
                catch (Exception error)
                {
                    Type t = System.Reflection.MethodBase.GetCurrentMethod().DeclaringType;
                    LogEvents.ParserGenericException(t, error);
                }
            }
        }
示例#30
0
        public static IEnumerable<String> ExtractElementWords(ProgramElement element)
        {
            var list = new List<string>();

            if (element as ClassElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractClassWords(element as ClassElement));
                return list;
            }
            if (element as CommentElement != null)
            {
                list.AddRange(ExtractCommentWords(element as CommentElement));
                return list;
            }
            if (element as FieldElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractFieldWords(element as FieldElement));
                return list;
            }
            if (element as MethodElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractMethodWords(element as MethodElement));
                return list;
            }
            if (element as MethodPrototypeElement != null)
            {
                list.AddRange(ExtractMethodPrototypeWords(element as MethodPrototypeElement));
                return list;
            }
            if (element as PropertyElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractPropertyWords(element as PropertyElement));
                return list;
            }
            if (element as StructElement != null)
            {
                AddElementName(element, list);
                list.AddRange(ExtractStructWords(element as StructElement));
                return list;
            }
            if (element as TextFileElement != null)
            {
                list.AddRange(ExtractTextLineElement(element as TextFileElement));
                return list;
            }
            if (element as XmlXElement != null)
            {
                list.AddRange(ExtractXmlWords(element as XmlXElement));
                return list;
            }

            if (element.GetCustomProperties().Count > 0)
            {
                list.AddRange(ExtractUnknownElementWords(element));
                return list;
            }
            list.Clear();
            return list;
        }
 private ConverterFromProgramElementToDocument(ProgramElement programElement, SandoDocument sandoDocument)
 {
     this.programElement = programElement;
     this.sandoDocument  = sandoDocument;
 }
 internal static ConverterFromProgramElementToDocument Create(ProgramElement programElement, SandoDocument sandoDocument)
 {
     return new ConverterFromProgramElementToDocument(programElement,sandoDocument);
 }