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 @@ -82,9 +82,9 @@ namespace Grunwald.BooBinding
{
ParseProjectContent pc = base.CreateProjectContent();
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);
pc.ReferencedContents.Add(ParserService.GetProjectContentForReference(booLangItem));
pc.AddReferencedContent(ParserService.GetProjectContentForReference(booLangItem));
if (BooCompilerPC == null) {
ReferenceProjectItem booCompilerItem = new ReferenceProjectItem(this, typeof(Boo.Lang.Compiler.AbstractAstAttribute).Assembly.Location);
BooCompilerPC = ParserService.GetProjectContentForReference(booCompilerItem);

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

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

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

@ -24,7 +24,11 @@ namespace ICSharpCode.MonoAddIn @@ -24,7 +24,11 @@ namespace ICSharpCode.MonoAddIn
if (assemblyName != null && assemblyName.FileName != null) {
return CecilReader.LoadAssembly(assemblyName.FileName, this);
} 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;
}
}

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

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

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

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

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

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

Loading…
Cancel
Save