Author: lluis
Date: 2006-01-13 12:54:58 -0500 (Fri, 13 Jan 2006)
New Revision: 55528
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/FileEntry.cs
Log:
2006-01-13 Lluis Sanchez Gual <[EMAIL PROTECTED]>
* MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs:
Properly handle errors found when parsing an assembly. When there
is an error, make sure the assembly is reparsed the next time MD starts.
* MonoDevelop.Projects.Parser/FileEntry.cs: Added DisableParse
property.
* MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs: In Write(),
close the file in case of error. Also flush the binary writer
before writing the index offset.
Modified: trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog
===================================================================
--- trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog 2006-01-13
17:54:31 UTC (rev 55527)
+++ trunk/monodevelop/Core/src/MonoDevelop.Projects/ChangeLog 2006-01-13
17:54:58 UTC (rev 55528)
@@ -1,3 +1,14 @@
+2006-01-13 Lluis Sanchez Gual <[EMAIL PROTECTED]>
+
+ * MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs:
+ Properly handle errors found when parsing an assembly. When there
+ is an error, make sure the assembly is reparsed the next time MD starts.
+ * MonoDevelop.Projects.Parser/FileEntry.cs: Added DisableParse
+ property.
+ * MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs: In Write(),
+ close the file in case of error. Also flush the binary writer
+ before writing the index offset.
+
2006-01-10 Mart Roosmaa <[EMAIL PROTECTED]>
* MonoDevelop.Projects/Combine.cs: Updated an using statement.
Modified:
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs
===================================================================
---
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs
2006-01-13 17:54:31 UTC (rev 55527)
+++
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/AssemblyCodeCompletionDatabase.cs
2006-01-13 17:54:58 UTC (rev 55528)
@@ -117,6 +117,18 @@
ainfo.Load (fileName, false);
UpdateClassInformation (ainfo.Classes,
fileName);
}
+ } catch (Exception ex) {
+ FileEntry e = GetFile (fileName);
+ e.LastParseTime = DateTime.MinValue;
+ if (e.ParseErrorRetries > 0) {
+ if (--e.ParseErrorRetries == 0) {
+ e.DisableParse = true;
+ }
+ }
+ else
+ e.ParseErrorRetries = 3;
+ monitor.ReportError ("Error parsing assembly: "
+ fileName, ex);
+ throw;
} finally {
monitor.EndTask ();
if (parentMonitor == null) monitor.Dispose ();
Modified:
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs
===================================================================
---
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs
2006-01-13 17:54:31 UTC (rev 55527)
+++
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/CodeCompletionDatabase.cs
2006-01-13 17:54:58 UTC (rev 55528)
@@ -183,74 +183,84 @@
BinaryFormatter bf = new BinaryFormatter ();
BinaryWriter bw = new BinaryWriter (dfile);
- // The headers are the first thing to write, so
they can be read
- // without deserializing the whole file.
- bf.Serialize (dfile, headers);
-
- // The position of the index will be written
here
- long indexOffsetPos = dfile.Position;
- bw.Write ((long)0);
-
- MemoryStream buffer = new MemoryStream ();
- BinaryWriter bufWriter = new BinaryWriter
(buffer);
-
- // Write all class data
- foreach (FileEntry fe in files.Values)
- {
- ClassEntry ce = fe.FirstClass;
- while (ce != null)
+ try {
+ // The headers are the first thing to
write, so they can be read
+ // without deserializing the whole file.
+ bf.Serialize (dfile, headers);
+
+ // The position of the index will be
written here
+ long indexOffsetPos = dfile.Position;
+ bw.Write ((long)0);
+
+ MemoryStream buffer = new MemoryStream
();
+ BinaryWriter bufWriter = new
BinaryWriter (buffer);
+
+ // Write all class data
+ foreach (FileEntry fe in files.Values)
{
- IClass c = ce.Class;
- byte[] data;
- int len;
-
- if (c == null) {
- // Copy the data from
the source file
- if (datareader == null)
{
- datafile = new
FileStream (dataFile, FileMode.Open, FileAccess.Read, FileShare.Read);
- datareader =
new BinaryReader (datafile);
+ ClassEntry ce = fe.FirstClass;
+ while (ce != null)
+ {
+ IClass c = ce.Class;
+ byte[] data;
+ int len;
+
+ if (c == null) {
+ // Copy the
data from the source file
+ if (datareader
== null) {
+
datafile = new FileStream (dataFile, FileMode.Open, FileAccess.Read,
FileShare.Read);
+
datareader = new BinaryReader (datafile);
+ }
+
datafile.Position = ce.Position;
+ len =
datareader.ReadInt32 ();
+ data = new
byte[len];
+ datafile.Read
(data, 0, len);
}
- datafile.Position =
ce.Position;
- len =
datareader.ReadInt32 ();
- data = new byte[len];
- datafile.Read (data, 0,
len);
+ else {
+ buffer.Position
= 0;
+
PersistentClass.WriteTo (c, bufWriter, parserDatabase.DefaultNameEncoder);
+ data =
buffer.GetBuffer ();
+ len =
(int)buffer.Position;
+ }
+
+ ce.Position =
dfile.Position;
+ bw.Write (len);
+ bw.Write (data, 0, len);
+ ce = ce.NextInFile;
}
- else {
- buffer.Position = 0;
- PersistentClass.WriteTo
(c, bufWriter, parserDatabase.DefaultNameEncoder);
- data = buffer.GetBuffer
();
- len =
(int)buffer.Position;
- }
+ }
+
+ bw.Flush ();
+
+ // Write the index
+ long indexOffset = dfile.Position;
+
+ Queue dataQueue = new Queue ();
+ dataQueue.Enqueue (references);
+ dataQueue.Enqueue (rootNamespace);
+ dataQueue.Enqueue (files);
+ SerializeData (dataQueue);
+ bf.Serialize (dfile, dataQueue.ToArray
());
+
+ dfile.Position = indexOffsetPos;
+ bw.Write (indexOffset);
+
+ bw.Close ();
+ dfile.Close ();
+ dfile = null;
+
+ CloseReader ();
+
+ if (File.Exists (dataFile))
+ File.Delete (dataFile);
- ce.Position = dfile.Position;
- bw.Write (len);
- bw.Write (data, 0, len);
- ce = ce.NextInFile;
- }
+ File.Move (tmpDataFile, dataFile);
+ } catch {
+ if (dfile != null)
+ dfile.Close ();
+ if (File.Exists (tmpDataFile))
+ File.Delete (tmpDataFile);
}
-
- // Write the index
- long indexOffset = dfile.Position;
-
- Queue dataQueue = new Queue ();
- dataQueue.Enqueue (references);
- dataQueue.Enqueue (rootNamespace);
- dataQueue.Enqueue (files);
- SerializeData (dataQueue);
- bf.Serialize (dfile, dataQueue.ToArray ());
-
- dfile.Position = indexOffsetPos;
- bw.Write (indexOffset);
-
- bw.Close ();
- dfile.Close ();
-
- CloseReader ();
-
- if (File.Exists (dataFile))
- File.Delete (dataFile);
-
- File.Move (tmpDataFile, dataFile);
}
}
@@ -381,7 +391,7 @@
{
if (!File.Exists (file.FileName))
continue;
FileInfo fi = new FileInfo
(file.FileName);
- if (fi.LastWriteTime >
file.LastParseTime || file.ParseErrorRetries > 0)
+ if ((fi.LastWriteTime >
file.LastParseTime || file.ParseErrorRetries > 0) && !file.DisableParse)
QueueParseJob (file);
}
}
Modified:
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/FileEntry.cs
===================================================================
---
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/FileEntry.cs
2006-01-13 17:54:31 UTC (rev 55527)
+++
trunk/monodevelop/Core/src/MonoDevelop.Projects/MonoDevelop.Projects.Parser/FileEntry.cs
2006-01-13 17:54:58 UTC (rev 55528)
@@ -42,6 +42,9 @@
ClassEntry firstClass;
int parseErrorRetries;
+ [NonSerialized]
+ bool disableParse;
+
public FileEntry (string path)
{
filePath = path;
@@ -53,6 +56,11 @@
get { return filePath; }
}
+ public bool DisableParse {
+ get { return disableParse; }
+ set { disableParse = value; }
+ }
+
public DateTime LastParseTime
{
get { return parseTime; }
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches