|
|
|
@ -9,6 +9,7 @@ using System.Runtime.Serialization;
@@ -9,6 +9,7 @@ using System.Runtime.Serialization;
|
|
|
|
|
using System.Threading; |
|
|
|
|
using System.Threading.Tasks; |
|
|
|
|
using ICSharpCode.Core; |
|
|
|
|
using ICSharpCode.NRefactory; |
|
|
|
|
using ICSharpCode.NRefactory.Editor; |
|
|
|
|
using ICSharpCode.NRefactory.TypeSystem; |
|
|
|
|
using ICSharpCode.NRefactory.TypeSystem.Implementation; |
|
|
|
@ -44,7 +45,7 @@ namespace ICSharpCode.SharpDevelop.Parser
@@ -44,7 +45,7 @@ namespace ICSharpCode.SharpDevelop.Parser
|
|
|
|
|
// time necessary for loading references, in relation to time for a single C# file
|
|
|
|
|
const int LoadingReferencesWorkAmount = 15; |
|
|
|
|
|
|
|
|
|
string cacheFileName; |
|
|
|
|
readonly string cacheFileName; |
|
|
|
|
|
|
|
|
|
#region Constructor + Dispose
|
|
|
|
|
public ProjectContentContainer(MSBuildBasedProject project, IProjectContent initialProjectContent) |
|
|
|
@ -58,8 +59,8 @@ namespace ICSharpCode.SharpDevelop.Parser
@@ -58,8 +59,8 @@ namespace ICSharpCode.SharpDevelop.Parser
|
|
|
|
|
|
|
|
|
|
SD.ProjectService.ProjectItemAdded += OnProjectItemAdded; |
|
|
|
|
SD.ProjectService.ProjectItemRemoved += OnProjectItemRemoved; |
|
|
|
|
SD.AssemblyParserService.AssemblyRefreshed += OnAssemblyRefreshed; |
|
|
|
|
|
|
|
|
|
var parserService = SD.ParserService; |
|
|
|
|
List<FileName> filesToParse = new List<FileName>(); |
|
|
|
|
foreach (var file in project.Items.OfType<FileProjectItem>()) { |
|
|
|
|
if (IsParseableFile(file)) { |
|
|
|
@ -78,6 +79,8 @@ namespace ICSharpCode.SharpDevelop.Parser
@@ -78,6 +79,8 @@ namespace ICSharpCode.SharpDevelop.Parser
|
|
|
|
|
{ |
|
|
|
|
SD.ProjectService.ProjectItemAdded -= OnProjectItemAdded; |
|
|
|
|
SD.ProjectService.ProjectItemRemoved -= OnProjectItemRemoved; |
|
|
|
|
SD.AssemblyParserService.AssemblyRefreshed -= OnAssemblyRefreshed; |
|
|
|
|
|
|
|
|
|
IProjectContent pc; |
|
|
|
|
bool serializeOnDispose; |
|
|
|
|
lock (lockObj) { |
|
|
|
@ -313,7 +316,6 @@ namespace ICSharpCode.SharpDevelop.Parser
@@ -313,7 +316,6 @@ namespace ICSharpCode.SharpDevelop.Parser
|
|
|
|
|
|
|
|
|
|
void ParseFiles(List<FileName> filesToParse, IProgressMonitor progressMonitor) |
|
|
|
|
{ |
|
|
|
|
IParserService parserService = SD.ParserService; |
|
|
|
|
IProjectContent cachedPC = TryReadFromCache(cacheFileName); |
|
|
|
|
ParseableFileContentFinder finder = new ParseableFileContentFinder(); |
|
|
|
|
|
|
|
|
@ -391,7 +393,6 @@ namespace ICSharpCode.SharpDevelop.Parser
@@ -391,7 +393,6 @@ namespace ICSharpCode.SharpDevelop.Parser
|
|
|
|
|
|
|
|
|
|
void DoReparseCode(List<FileName> filesToParse, IProgressMonitor progressMonitor) |
|
|
|
|
{ |
|
|
|
|
IParserService parserService = SD.ParserService; |
|
|
|
|
ParseableFileContentFinder finder = new ParseableFileContentFinder(); |
|
|
|
|
double fileCountInverse = 1.0 / filesToParse.Count; |
|
|
|
|
object progressLock = new object(); |
|
|
|
@ -424,7 +425,7 @@ namespace ICSharpCode.SharpDevelop.Parser
@@ -424,7 +425,7 @@ namespace ICSharpCode.SharpDevelop.Parser
|
|
|
|
|
progressMonitor.Progress += assemblyResolvingProgress; |
|
|
|
|
progressMonitor.CancellationToken.ThrowIfCancellationRequested(); |
|
|
|
|
|
|
|
|
|
List<string> assemblyFiles = new List<string>(); |
|
|
|
|
List<FileName> assemblyFiles = new List<FileName>(); |
|
|
|
|
List<IAssemblyReference> newReferences = new List<IAssemblyReference>(); |
|
|
|
|
|
|
|
|
|
foreach (var reference in referenceItems) { |
|
|
|
@ -436,10 +437,10 @@ namespace ICSharpCode.SharpDevelop.Parser
@@ -436,10 +437,10 @@ namespace ICSharpCode.SharpDevelop.Parser
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach (string file in assemblyFiles) { |
|
|
|
|
foreach (var file in assemblyFiles) { |
|
|
|
|
progressMonitor.CancellationToken.ThrowIfCancellationRequested(); |
|
|
|
|
if (File.Exists(file)) { |
|
|
|
|
var pc = SD.AssemblyParserService.GetAssembly(FileName.Create(file), progressMonitor.CancellationToken); |
|
|
|
|
var pc = SD.AssemblyParserService.GetAssembly(file, progressMonitor.CancellationToken); |
|
|
|
|
if (pc != null) { |
|
|
|
|
newReferences.Add(pc); |
|
|
|
|
} |
|
|
|
@ -468,6 +469,18 @@ namespace ICSharpCode.SharpDevelop.Parser
@@ -468,6 +469,18 @@ namespace ICSharpCode.SharpDevelop.Parser
|
|
|
|
|
"Loading " + project.Name + "...", LoadingReferencesWorkAmount); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void OnAssemblyRefreshed(object sender, RefreshAssemblyEventArgs e) |
|
|
|
|
{ |
|
|
|
|
lock (lockObj) { |
|
|
|
|
int index = Array.IndexOf(this.references, e.OldAssembly); |
|
|
|
|
if (index >= 0 && e.NewAssembly != null) { |
|
|
|
|
this.references[index] = e.NewAssembly; |
|
|
|
|
projectContent = projectContent.RemoveAssemblyReferences(e.OldAssembly).AddAssemblyReferences(e.NewAssembly); |
|
|
|
|
SD.ParserService.InvalidateCurrentSolutionSnapshot(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Project Item Added/Removed
|
|
|
|
|