Browse Source

Fixed NullReferenceException when implicit reference (like Microsoft.VisualBasic in VB projects) cannot be loaded for code-completion.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1938 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 19 years ago
parent
commit
42ab1e46fb
  1. 4
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs
  2. 2
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs
  3. 6
      src/AddIns/Misc/MonoAddIn/Project/Src/MonoProjectContentRegistry.cs
  4. 16
      src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs
  5. 9
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  6. 9
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs

4
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BooProject.cs

@ -82,9 +82,9 @@ namespace Grunwald.BooBinding
{ {
ParseProjectContent pc = base.CreateProjectContent(); ParseProjectContent pc = base.CreateProjectContent();
ReferenceProjectItem systemItem = new ReferenceProjectItem(this, "System"); ReferenceProjectItem systemItem = new ReferenceProjectItem(this, "System");
pc.ReferencedContents.Add(ParserService.GetProjectContentForReference(systemItem)); pc.AddReferencedContent(ParserService.GetProjectContentForReference(systemItem));
ReferenceProjectItem booLangItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Builtins).Assembly.Location); ReferenceProjectItem booLangItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Builtins).Assembly.Location);
pc.ReferencedContents.Add(ParserService.GetProjectContentForReference(booLangItem)); pc.AddReferencedContent(ParserService.GetProjectContentForReference(booLangItem));
if (BooCompilerPC == null) { if (BooCompilerPC == null) {
ReferenceProjectItem booCompilerItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Compiler.AbstractAstAttribute).Assembly.Location); ReferenceProjectItem booCompilerItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Compiler.AbstractAstAttribute).Assembly.Location);
BooCompilerPC = ParserService.GetProjectContentForReference(booCompilerItem); BooCompilerPC = ParserService.GetProjectContentForReference(booCompilerItem);

2
src/AddIns/BackendBindings/VBNetBinding/Project/Src/Project/VBNetProject.cs

@ -65,7 +65,7 @@ namespace VBNetBinding
ParseProjectContent pc = base.CreateProjectContent(); ParseProjectContent pc = base.CreateProjectContent();
ReferenceProjectItem vbRef = new ReferenceProjectItem(this, "Microsoft.VisualBasic"); ReferenceProjectItem vbRef = new ReferenceProjectItem(this, "Microsoft.VisualBasic");
if (vbRef != null) { if (vbRef != null) {
pc.ReferencedContents.Add(ParserService.GetProjectContentForReference(vbRef)); pc.AddReferencedContent(ParserService.GetProjectContentForReference(vbRef));
} }
MyNamespaceBuilder.BuildNamespace(this, pc); MyNamespaceBuilder.BuildNamespace(this, pc);
return pc; return pc;

6
src/AddIns/Misc/MonoAddIn/Project/Src/MonoProjectContentRegistry.cs

@ -24,7 +24,11 @@ namespace ICSharpCode.MonoAddIn
if (assemblyName != null && assemblyName.FileName != null) { if (assemblyName != null && assemblyName.FileName != null) {
return CecilReader.LoadAssembly(assemblyName.FileName, this); return CecilReader.LoadAssembly(assemblyName.FileName, this);
} else { } else {
HostCallback.ShowAssemblyLoadError(itemFileName, itemInclude, ""); if (MonoToolLocationHelper.IsMonoInstalled) {
HostCallback.ShowAssemblyLoadError(itemFileName, itemInclude, "Could not find assembly in Mono's GAC.");
} else {
HostCallback.ShowAssemblyLoadError(itemFileName, itemInclude, "Could not find assembly in Mono's GAC - Mono is not installed.");
}
return null; return null;
} }
} }

16
src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs

@ -22,9 +22,7 @@ namespace ICSharpCode.SharpDevelop
newProjectContent.Language = project.LanguageProperties; newProjectContent.Language = project.LanguageProperties;
newProjectContent.initializing = true; newProjectContent.initializing = true;
IProjectContent mscorlib = ParserService.GetRegistryForReference(new ReferenceProjectItem(project, "mscorlib")).Mscorlib; IProjectContent mscorlib = ParserService.GetRegistryForReference(new ReferenceProjectItem(project, "mscorlib")).Mscorlib;
if (mscorlib != null) { newProjectContent.AddReferencedContent(mscorlib);
newProjectContent.ReferencedContents.Add(mscorlib);
}
return newProjectContent; return newProjectContent;
} }
@ -67,10 +65,7 @@ namespace ICSharpCode.SharpDevelop
{ {
lock (ReferencedContents) { lock (ReferencedContents) {
ReferencedContents.Clear(); ReferencedContents.Clear();
IProjectContent mscorlib = ParserService.GetRegistryForReference(new ReferenceProjectItem(project, "mscorlib")).Mscorlib; AddReferencedContent(ParserService.GetRegistryForReference(new ReferenceProjectItem(project, "mscorlib")).Mscorlib);
if (mscorlib != null) {
ReferencedContents.Add(mscorlib);
}
} }
// prevent adding event handler twice // prevent adding event handler twice
ProjectService.ProjectItemAdded -= OnProjectItemAdded; ProjectService.ProjectItemAdded -= OnProjectItemAdded;
@ -98,12 +93,7 @@ namespace ICSharpCode.SharpDevelop
void AddReference(ReferenceProjectItem reference, bool updateInterDependencies) void AddReference(ReferenceProjectItem reference, bool updateInterDependencies)
{ {
try { try {
IProjectContent referencedContent = ParserService.GetProjectContentForReference(reference); AddReferencedContent(ParserService.GetProjectContentForReference(reference));
if (referencedContent != null) {
lock (this.ReferencedContents) {
this.ReferencedContents.Add(referencedContent);
}
}
if (updateInterDependencies) { if (updateInterDependencies) {
UpdateReferenceInterDependencies(); UpdateReferenceInterDependencies();
} }

9
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -501,7 +501,7 @@ namespace ICSharpCode.SharpDevelop
LoggingService.Info("Creating default project content"); LoggingService.Info("Creating default project content");
//LoggingService.Debug("Stacktrace is:\n" + Environment.StackTrace); //LoggingService.Debug("Stacktrace is:\n" + Environment.StackTrace);
defaultProjectContent = new DefaultProjectContent(); defaultProjectContent = new DefaultProjectContent();
defaultProjectContent.ReferencedContents.Add(defaultProjectContentRegistry.Mscorlib); defaultProjectContent.AddReferencedContent(defaultProjectContentRegistry.Mscorlib);
Thread t = new Thread(new ThreadStart(CreateDefaultProjectContentReferences)); Thread t = new Thread(new ThreadStart(CreateDefaultProjectContentReferences));
t.IsBackground = true; t.IsBackground = true;
t.Priority = ThreadPriority.BelowNormal; t.Priority = ThreadPriority.BelowNormal;
@ -514,12 +514,7 @@ namespace ICSharpCode.SharpDevelop
IList<string> defaultReferences = AddInTree.BuildItems<string>("/SharpDevelop/Services/ParserService/SingleFileGacReferences", null, false); IList<string> defaultReferences = AddInTree.BuildItems<string>("/SharpDevelop/Services/ParserService/SingleFileGacReferences", null, false);
foreach (string defaultReference in defaultReferences) { foreach (string defaultReference in defaultReferences) {
ReferenceProjectItem item = new ReferenceProjectItem(null, defaultReference); ReferenceProjectItem item = new ReferenceProjectItem(null, defaultReference);
IProjectContent pc = ParserService.GetProjectContentForReference(item); defaultProjectContent.AddReferencedContent(ParserService.GetProjectContentForReference(item));
if (pc != null) {
lock (defaultProjectContent.ReferencedContents) {
defaultProjectContent.ReferencedContents.Add(pc);
}
}
} }
if (WorkbenchSingleton.Workbench != null) { if (WorkbenchSingleton.Workbench != null) {
WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += delegate { WorkbenchSingleton.Workbench.ActiveWorkbenchWindowChanged += delegate {

9
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs

@ -898,6 +898,15 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
#endregion #endregion
public void AddReferencedContent(IProjectContent pc)
{
if (pc != null) {
lock (this.ReferencedContents) {
this.ReferencedContents.Add(pc);
}
}
}
public event EventHandler ReferencedContentsChanged; public event EventHandler ReferencedContentsChanged;
protected virtual void OnReferencedContentsChanged(EventArgs e) protected virtual void OnReferencedContentsChanged(EventArgs e)

Loading…
Cancel
Save