Author: lluis
Date: 2006-07-25 11:57:17 -0400 (Tue, 25 Jul 2006)
New Revision: 62966

Modified:
   trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog
   
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs
   
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs
   
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/DefaultParserService.cs
   
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/IParserService.cs
Log:
2006-07-25 Lluis Sanchez Gual  <[EMAIL PROTECTED]> 

        * MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs:
        * MonoDevelop.Projects.Parser/IParserService.cs:
        * MonoDevelop.Projects.Parser/DefaultParserService.cs:
          Added an UpdateDatabase method to IParserContext. This method
          will parse all modified files of the parser context. It does
          not use the parsing queue, so it will block until done.
          
        * MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs:
          Override IsFileModified instead of CheckModifiedFiles.



Modified: trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog
===================================================================
--- trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog   2006-07-25 
15:49:45 UTC (rev 62965)
+++ trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog   2006-07-25 
15:57:17 UTC (rev 62966)
@@ -1,3 +1,15 @@
+2006-07-25 Lluis Sanchez Gual  <[EMAIL PROTECTED]> 
+
+       * MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs:
+       * MonoDevelop.Projects.Parser/IParserService.cs:
+       * MonoDevelop.Projects.Parser/DefaultParserService.cs:
+         Added an UpdateDatabase method to IParserContext. This method
+         will parse all modified files of the parser context. It does
+         not use the parsing queue, so it will block until done.
+         
+       * MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs:
+         Override IsFileModified instead of CheckModifiedFiles.
+
 2006-07-25 Lluis Sanchez Gual  <[EMAIL PROTECTED]>
 
        * MonoDevelop.Projects/Combine.cs: When disposing the combine, dispose

Modified: 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs
===================================================================
--- 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs
       2006-07-25 15:49:45 UTC (rev 62965)
+++ 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs
       2006-07-25 15:57:17 UTC (rev 62966)
@@ -103,22 +103,16 @@
                        }
                }
                
-               public override void CheckModifiedFiles ()
+               protected override bool IsFileModified (FileEntry file)
                {
                        if (!isPackageAssembly)
-                               base.CheckModifiedFiles ();
-                       else {
-                               // Don't check timestamps for packaged 
assemblies.
-                               // Just check if the package has changed.
+                               return base.IsFileModified (file);
 
-                               foreach (FileEntry file in files.Values) {
-                                       SystemPackage pkg = 
Runtime.SystemAssemblyService.GetPackageFromFullName (assemblyName);
-                                       bool versionMismatch = pkg != null && 
packageVersion != pkg.Name + " " + pkg.Version;
-                                       if (!file.DisableParse && 
(versionMismatch || file.LastParseTime == DateTime.MinValue || 
file.ParseErrorRetries > 0)) {
-                                               QueueParseJob (file);
-                                       }
-                               }
-                       }
+                       // Don't check timestamps for packaged assemblies.
+                       // Just check if the package has changed.
+                       SystemPackage pkg = 
Runtime.SystemAssemblyService.GetPackageFromFullName (assemblyName);
+                       bool versionMismatch = pkg != null && packageVersion != 
pkg.Name + " " + pkg.Version;
+                       return (!file.DisableParse && (versionMismatch || 
file.LastParseTime == DateTime.MinValue || file.ParseErrorRetries > 0));
                }
                
                public static string GetFullAssemblyName (string s)

Modified: 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs
===================================================================
--- 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs
       2006-07-25 15:49:45 UTC (rev 62965)
+++ 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs
       2006-07-25 15:57:17 UTC (rev 62966)
@@ -405,22 +405,43 @@
                        
                        ce.Class = ReadClass (ce);
                        return ce.Class;
-               }               
+               }
                
+               public void UpdateDatabase ()
+               {
+                       ArrayList list = GetModifiedFileEntries ();
+                       foreach (FileEntry file in list)
+                               ParseFile (file.FileName, null);
+               }
+               
                public virtual void CheckModifiedFiles ()
                {
+                       ArrayList list = GetModifiedFileEntries ();
+                       foreach (FileEntry file in list)
+                               QueueParseJob (file);
+               }
+               
+               protected ArrayList GetModifiedFileEntries ()
+               {
+                       ArrayList list = new ArrayList ();
                        lock (rwlock)
                        {
-                               foreach (FileEntry file in files.Values)
-                               {
-                                       if (!File.Exists (file.FileName)) 
continue;
-                                       FileInfo fi = new FileInfo 
(file.FileName);
-                                       if ((fi.LastWriteTime > 
file.LastParseTime || file.ParseErrorRetries > 0) && !file.DisableParse)
-                                               QueueParseJob (file);
+                               foreach (FileEntry file in files.Values) {
+                                       if (IsFileModified (file))
+                                               list.Add (file);
                                }
                        }
+                       return list;
                }
                
+               protected virtual bool IsFileModified (FileEntry file)
+               {
+                       if (!File.Exists (file.FileName))
+                               return false;
+                       FileInfo fi = new FileInfo (file.FileName);
+                       return ((fi.LastWriteTime > file.LastParseTime || 
file.ParseErrorRetries > 0) && !file.DisableParse);
+               }
+               
                protected void QueueParseJob (FileEntry file)
                {
                        // Change date now, to avoid reparsing if 
CheckModifiedFiles is called again

Modified: 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/DefaultParserService.cs
===================================================================
--- 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/DefaultParserService.cs
 2006-07-25 15:49:45 UTC (rev 62965)
+++ 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/DefaultParserService.cs
 2006-07-25 15:57:17 UTC (rev 62966)
@@ -118,6 +118,11 @@
                        get { return pdb; }
                }
                
+               public void UpdateDatabase ()
+               {
+                       db.UpdateDatabase ();
+               }
+               
                public IExpressionFinder GetExpressionFinder (string fileName)
                {
                        return pdb.GetExpressionFinder (fileName);
@@ -458,7 +463,10 @@
                
                public IProjectParserContext GetProjectParserContext (Project 
project)
                {
-                       return new ProjectParserContext (parserService, this, 
GetProjectDatabase (project));
+                       CodeCompletionDatabase pdb = GetProjectDatabase 
(project);
+                       if (pdb == null)
+                               throw new InvalidOperationException ("Project 
not found in parser database");
+                       return new ProjectParserContext (parserService, this, 
pdb);
                }
                
                public IFileParserContext GetFileParserContext (string file)

Modified: 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/IParserService.cs
===================================================================
--- 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/IParserService.cs
       2006-07-25 15:49:45 UTC (rev 62965)
+++ 
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/IParserService.cs
       2006-07-25 15:57:17 UTC (rev 62966)
@@ -90,6 +90,9 @@
                IParseInformation ParseFile (string fileName, string 
fileContent);
                IParseInformation ParseFile (ITextFile file);
                
+               // Makes sure that all parser information is up to date.
+               void UpdateDatabase ();
+               
                IExpressionFinder GetExpressionFinder(string fileName);
                
                IParseInformation GetParseInformation (string fileName);

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to