コード例 #1
0
        private static XElement GetXElementForFile(FileEventRaisedArgs args, ISrcMLGlobalService srcMLService)
        {
            XElement xelement = null;

            if (!args.EventType.Equals(FileEventType.FileDeleted))
            {
                if (args.FilePath.EndsWith(".xml") || args.FilePath.EndsWith(".xaml"))
                {
                    var allText = File.ReadAllText(args.FilePath);
                    try
                    {
                        xelement = XDocument.Parse(allText, LoadOptions.SetLineInfo |
                                                   LoadOptions.PreserveWhitespace).Root;
                    }
                    catch (Exception e)
                    {
                        return(xelement);
                    }
                }
                else
                {
                    xelement = srcMLService.GetXElementForSourceFile(args.FilePath);
                }
            }
            return(xelement);
        }
コード例 #2
0
        private void Archive_SourceFileChanged(object sender, FileEventRaisedArgs e)
        {
            try {
                scopeLock.EnterWriteLock();
                switch (e.EventType)
                {
                case FileEventType.FileChanged:
                    // Treat a changed source file as deleted then added
                    RemoveFile(e.FilePath);
                    goto case FileEventType.FileAdded;

                case FileEventType.FileAdded:
                    AddFile(e.FilePath);
                    break;

                case FileEventType.FileDeleted:
                    RemoveFile(e.FilePath);
                    break;

                case FileEventType.FileRenamed:
                    // TODO: could a more efficient rename action be supported within the data
                    //       structures themselves?
                    RemoveFile(e.OldFilePath);
                    AddFile(e.FilePath);
                    break;
                }
                OnFileProcessed(e);
            } catch (Exception ex) {
                // TODO log exception
                Console.Error.WriteLine("Error: {0} ({1} {2})", ex.Message, e.EventType, e.FilePath);
            } finally {
                scopeLock.ExitWriteLock();
            }
        }
コード例 #3
0
        internal void OnFileChanged(object sender, FileEventRaisedArgs e)
        {
            FileEventType fileEvent   = e.EventType;
            string        oldFilePath = e.OldFilePath;
            string        newFilePath = e.FilePath;

            //bool hasSrcML = e.HasSrcML;

            switch (fileEvent)
            {
            case FileEventType.FileAdded:
                return;

            case FileEventType.FileChanged:
                ChangeMethodsInChangedFile(oldFilePath);
                break;

            case FileEventType.FileDeleted:
                DeleteMethodsInDeletedFile(oldFilePath);
                break;

            case FileEventType.FileRenamed:
                ChangeMethodsInRenamedFile(oldFilePath, newFilePath);
                break;
            }
        }
コード例 #4
0
        protected virtual void OnFileChanged(FileEventRaisedArgs e)
        {
            EventHandler <FileEventRaisedArgs> handler = SourceFileChanged;

            if (handler != null)
            {
                handler(this, e);
            }
        }
コード例 #5
0
        /// <summary>
        /// Raises the file processed event
        /// </summary>
        /// <param name="e">The event arguments</param>
        protected virtual void OnFileProcessed(FileEventRaisedArgs e)
        {
            EventHandler <FileEventRaisedArgs> handler = FileProcessed;

            if (handler != null)
            {
                handler(this, e);
            }
        }
コード例 #6
0
        private void OnFileProcessed(FileEventRaisedArgs e)
        {
            EventHandler <FileEventRaisedArgs> handler = FileProcessed;

            if (handler != null)
            {
                handler(this, e);
            }
        }
コード例 #7
0
 /// <summary>
 /// Respond to the FileChanged event from Solution Monitor.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="eventArgs"></param>
 private void RespondToFileChangedEvent(object sender, FileEventRaisedArgs eventArgs)
 {
     //SrcMLFileLogger.DefaultLogger.Info("SrcMLService: RespondToFileChangedEvent(), File = " + eventArgs.FilePath + ", EventType = " + eventArgs.EventType + ", HasSrcML = " + eventArgs.HasSrcML);
     // Show progress on the status bar.
     //if(duringStartup) {
     //amountCompleted++;
     //ShowProgressOnStatusBar("SrcML Service is processing " + eventArgs.FilePath);
     //}
     OnFileChanged(eventArgs);
 }
コード例 #8
0
 void _archive_SourceFileChanged(object sender, FileEventRaisedArgs e)
 {
     textBox1.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,
                                new Action(() =>
     {
         ////if (SourceEventType.Renamed == e.EventType)
         string srcMLAvailableText = (e.HasSrcML ? "(SrcML Available)" : String.Empty);
         if (FileEventType.FileRenamed == e.EventType)
         {
             textBox1.AppendText(String.Format("{0} {1} to {2}\n", e.EventType, e.OldFilePath, e.FilePath, srcMLAvailableText));
         }
         else
         {
             textBox1.AppendText(String.Format("{0} {1} {2}\n", e.EventType, e.FilePath, srcMLAvailableText));
         }
     }));
 }
コード例 #9
0
        public static void SourceFileChanged(object sender, FileEventRaisedArgs args)
        {
            fera = args;
            switch (args.EventType)
            {
            case FileEventType.FileAdded:
                receivedFileAdded = true;
                break;

            case FileEventType.FileChanged:
                receivedFileUpdated = true;
                break;

            case FileEventType.FileDeleted:
                receivedFileDeleted = true;
                break;
            }
        }
コード例 #10
0
        /// <summary>
        /// Responds to <see cref="AbstractArchive.FileChanged"/> events from <see cref="Archive"/>.
        /// Subclasses should override this method and only respond when the
        /// </summary>
        /// <param name="sender">The event sender</param>
        /// <param name="e">The event argument</param>
        protected virtual void Archive_FileChanged(object sender, FileEventRaisedArgs e)
        {
            switch (e.EventType)
            {
            case FileEventType.FileAdded:
                goto case FileEventType.FileChanged;

            case FileEventType.FileChanged:
                if (UseAsynchronousMethods)
                {
                    AddOrUpdateFileAsync(e.FilePath);
                }
                else
                {
                    AddOrUpdateFile(e.FilePath);
                }
                break;

            case FileEventType.FileDeleted:
                if (UseAsynchronousMethods)
                {
                    RemoveFileAsync(e.FilePath);
                }
                else
                {
                    RemoveFile(e.FilePath);
                }
                break;

            case FileEventType.FileRenamed:
                if (UseAsynchronousMethods)
                {
                    RenameFileAsync(e.OldFilePath, e.FilePath);
                }
                else
                {
                    RenameFile(e.OldFilePath, e.FilePath);
                }
                break;

            default:
                throw new InvalidOperationException("Invalid FileEventType");
            }
        }
コード例 #11
0
        public void CheckSrcMLFiles()
        {
            string        sourcePath    = fera.FilePath;
            string        oldSourcePath = fera.OldFilePath;
            FileEventType type          = fera.EventType;
            bool          hasSrcML      = fera.HasSrcML;

            if (type == FileEventType.FileAdded || type == FileEventType.FileChanged)
            {
                Assert.IsTrue((receivedFileAdded || receivedFileUpdated));
                if (hasSrcML)
                {
                    SrcMLArchive archive = srcMLService.GetSrcMLArchive();
                    Assert.IsNotNull(archive, "GetSrcMLArchive returned null.");
                    string srcMLPath = archive.GetXmlPathForSourcePath(sourcePath);
                    ////WriteLog(logFilePath, "Adding/Updating srcMLPath = " + srcMLPath);
                    Assert.IsTrue(File.Exists(srcMLPath), "The srcML file [" + srcMLPath + "] does not exist.");
                    Assert.AreEqual(new FileInfo(sourcePath).LastWriteTime, new FileInfo(srcMLPath).LastWriteTime);
                    XElement xelement = srcMLService.GetXElementForSourceFile(sourcePath);
                    Assert.IsNotNull(xelement, "GetXElementForSourceFile returned null.");
                }
            }
            else if (type == FileEventType.FileDeleted)
            {
                Assert.IsTrue(receivedFileDeleted);
                SrcMLArchive archive = srcMLService.GetSrcMLArchive();
                Assert.IsNotNull(archive, "GetSrcMLArchive returned null.");
                string srcMLPath = archive.GetXmlPathForSourcePath(sourcePath);
                ////WriteLog(logFilePath, "Deleting srcMLPath = " + srcMLPath);
                Assert.IsFalse(File.Exists(srcMLPath), "The srcML file [" + srcMLPath + "] still exists.");
                XElement xelementX = srcMLService.GetXElementForSourceFile(sourcePath);
                Assert.IsNull(xelementX, "GetXElementForSourceFile returned not null.");
            }
            receivedFileAdded = receivedFileUpdated = receivedFileDeleted = false;
            fera = null;
        }
コード例 #12
0
 public void SourceFileChanged(object sender, FileEventRaisedArgs args)
 {
     SourceFileChanged(sender, args, false);
 }
コード例 #13
0
 private void CurrentMonitor_FileChanged(object sender, FileEventRaisedArgs e)
 {
     OnSourceFileChanged(e);
 }
コード例 #14
0
 private void RespondToFileProcessed(object sender, FileEventRaisedArgs e)
 {
     OnFileProcessed(e);
 }
コード例 #15
0
 /// <summary>
 /// Method used to monitor <see cref="AbstractWorkingSet.Archive"/>. It does nothing.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected override void Archive_FileChanged(object sender, FileEventRaisedArgs e)
 {
 }
コード例 #16
0
 protected virtual void OnFileChanged(FileEventRaisedArgs e) {
     EventHandler<FileEventRaisedArgs> handler = SourceFileChanged;
     if(handler != null) {
         handler(this, e);
     }
 }
コード例 #17
0
 /// <summary>
 /// Method used to monitor <see cref="AbstractWorkingSet.Archive"/>. It does nothing.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected override void Archive_FileChanged(object sender, FileEventRaisedArgs e) { }
コード例 #18
0
 private void CurrentMonitor_FileChanged(object sender, FileEventRaisedArgs e) {
     OnSourceFileChanged(e);
 }
コード例 #19
0
 /// <summary>
 /// Respond to the FileChanged event from Solution Monitor.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="eventArgs"></param>
 private void RespondToFileChangedEvent(object sender, FileEventRaisedArgs eventArgs) {
     OnFileChanged(eventArgs);
 }
コード例 #20
0
 /// <summary>
 /// Raises the <see cref="FileProcessed"/> event
 /// </summary>
 /// <param name="e"></param>
 protected virtual void OnFileProcessed(FileEventRaisedArgs e) {
     EventHandler<FileEventRaisedArgs> handler = FileProcessed;
     if(null != handler) {
         handler(this, e);
     }
 }
コード例 #21
0
        public void SourceFileChanged(object sender, FileEventRaisedArgs args, bool commitImmediately = false)
        {
            var    cancelTokenSource = new CancellationTokenSource();
            var    cancelToken       = cancelTokenSource.Token;
            Action action            = () =>
            {
                cancelToken.ThrowIfCancellationRequested();

                // Ignore files that can not be indexed by Sando.
                var fileExtension = Path.GetExtension(args.FilePath);
                if (fileExtension != null && !fileExtension.Equals(String.Empty))
                {
                    string sourceFilePath    = args.FilePath;
                    string oldSourceFilePath = args.OldFilePath;
                    var    documentIndexer   = ServiceLocator.Resolve <DocumentIndexer>();
                    if (ServiceLocator.Resolve <IndexFilterManager>().ShouldFileBeIndexed(args.FilePath))
                    {
                        if (ExtensionPointsRepository.Instance.GetParserImplementation(fileExtension) != null)
                        {
                            // Get SrcMLService and use its API to get the XElement
                            var srcMLService = (sender as ISrcMLGlobalService);
                            cancelToken.ThrowIfCancellationRequested();
                            var xelement           = GetXElementForFile(args, srcMLService);
                            var indexUpdateManager = ServiceLocator.Resolve <IndexUpdateManager>();
                            var elapsed            = lastTime - DateTime.Now;
                            if (FileEventType.FileDeleted == args.EventType || !lastFile.Equals(sourceFilePath.ToLowerInvariant()) || elapsed.TotalMilliseconds > 1000)
                            {
                                switch (args.EventType)
                                {
                                case FileEventType.FileAdded:
                                    documentIndexer.DeleteDocuments(sourceFilePath.ToLowerInvariant());        //"just to be safe!"
                                    indexUpdateManager.Update(sourceFilePath.ToLowerInvariant(), xelement);
                                    SwumManager.Instance.AddSourceFile(sourceFilePath.ToLowerInvariant(), xelement);
                                    break;

                                case FileEventType.FileChanged:


                                    documentIndexer.DeleteDocuments(sourceFilePath.ToLowerInvariant());
                                    indexUpdateManager.Update(sourceFilePath.ToLowerInvariant(), xelement);
                                    SwumManager.Instance.UpdateSourceFile(sourceFilePath.ToLowerInvariant(), xelement);
                                    break;

                                case FileEventType.FileDeleted:
                                    documentIndexer.DeleteDocuments(sourceFilePath.ToLowerInvariant(), commitImmediately);
                                    SwumManager.Instance.RemoveSourceFile(sourceFilePath.ToLowerInvariant());
                                    break;

                                case FileEventType.FileRenamed:     // FileRenamed is repurposed. Now means you may already know about it, so check and only parse if not existing
                                    if (!SwumManager.Instance.ContainsFile(sourceFilePath.ToLowerInvariant()))
                                    {
                                        documentIndexer.DeleteDocuments(sourceFilePath.ToLowerInvariant());        //"just to be safe!"
                                        indexUpdateManager.Update(sourceFilePath.ToLowerInvariant(), xelement);
                                        SwumManager.Instance.AddSourceFile(sourceFilePath.ToLowerInvariant(), xelement);
                                    }
                                    break;
                                }
                                if (args.EventType != FileEventType.FileDeleted)
                                {
                                    lastFile = sourceFilePath.ToLowerInvariant();
                                    lastTime = DateTime.Now;
                                }
                            }
                        }
                    }
                    else
                    {
                        documentIndexer.DeleteDocuments(sourceFilePath, commitImmediately);
                    }
                }
            };

            StartNew(action, cancelTokenSource);
        }
コード例 #22
0
 private void RespondToFileProcessed(object sender, FileEventRaisedArgs e) {
     OnFileProcessed(e);
 }
コード例 #23
0
 public static void SourceFileChanged(object sender, FileEventRaisedArgs args) {
     fera = args;
     switch(args.EventType) {
         case FileEventType.FileAdded:
             receivedFileAdded = true;
             break;
         case FileEventType.FileChanged:
             receivedFileUpdated = true;
             break;
         case FileEventType.FileDeleted:
             receivedFileDeleted = true;
             break;
     }
 }
コード例 #24
0
 void _srcMonitor_FileChanged(object sender, FileEventRaisedArgs e) {
     OnFileProcessed(e);
 }
コード例 #25
0
 public void CheckSrcMLFiles() {
     string sourcePath = fera.FilePath;
     string oldSourcePath = fera.OldFilePath;
     FileEventType type = fera.EventType;
     bool hasSrcML = fera.HasSrcML;
     if(type == FileEventType.FileAdded || type == FileEventType.FileChanged) {
         Assert.IsTrue((receivedFileAdded || receivedFileUpdated));
         if(hasSrcML) {
             SrcMLArchive archive = srcMLService.GetSrcMLArchive();
             Assert.IsNotNull(archive, "GetSrcMLArchive returned null.");
             string srcMLPath = archive.GetXmlPathForSourcePath(sourcePath);
             ////WriteLog(logFilePath, "Adding/Updating srcMLPath = " + srcMLPath);
             Assert.IsTrue(File.Exists(srcMLPath), "The srcML file [" + srcMLPath + "] does not exist.");
             Assert.AreEqual(new FileInfo(sourcePath).LastWriteTime, new FileInfo(srcMLPath).LastWriteTime);
             XElement xelement = srcMLService.GetXElementForSourceFile(sourcePath);
             Assert.IsNotNull(xelement, "GetXElementForSourceFile returned null.");
         }
     } else if(type == FileEventType.FileDeleted) {
         Assert.IsTrue(receivedFileDeleted);
         SrcMLArchive archive = srcMLService.GetSrcMLArchive();
         Assert.IsNotNull(archive, "GetSrcMLArchive returned null.");
         string srcMLPath = archive.GetXmlPathForSourcePath(sourcePath);
         ////WriteLog(logFilePath, "Deleting srcMLPath = " + srcMLPath);
         Assert.IsFalse(File.Exists(srcMLPath), "The srcML file [" + srcMLPath + "] still exists.");
         XElement xelementX = srcMLService.GetXElementForSourceFile(sourcePath);
         Assert.IsNull(xelementX, "GetXElementForSourceFile returned not null.");
     }
     receivedFileAdded = receivedFileUpdated = receivedFileDeleted = false;
     fera = null;
 }
コード例 #26
0
 /// <summary>
 /// Respond to the FileChanged event from Solution Monitor.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="eventArgs"></param>
 private void RespondToFileChangedEvent(object sender, FileEventRaisedArgs eventArgs)
 {
     OnFileChanged(eventArgs);
 }
コード例 #27
0
 void _srcMonitor_FileChanged(object sender, FileEventRaisedArgs e)
 {
     OnFileProcessed(e);
 }