Beispiel #1
0
        /// <summary>
        /// Parses the specified file on disk.
        /// </summary>
        /// <param name="filename"></param>
        public void EnqueueFile(IProjectEntry projEntry, string filename)
        {
            var severity = Severity.Ignore;

            EnqueWorker(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    try
                    {
                        if (!File.Exists(filename))
                        {
                            break;
                        }
                        using (var reader = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete))
                        {
                            _parser.ParseFile(projEntry, filename, reader, severity);
                            return;
                        }
                    }
                    catch (IOException)
                    {
                        // file being copied, try again...
                        Thread.Sleep(100);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        // file is inaccessible, try again...
                        Thread.Sleep(100);
                    }
                }

                IGeneroProjectEntry gEntry = projEntry as IGeneroProjectEntry;
                IAnalysisCookie cookie     = null;
                Genero4glAst node          = null;
                if (gEntry != null)
                {
                    // failed to parse, keep the UpdateTree calls balanced
                    gEntry.UpdateTree(node, cookie);
                }
            });
        }