From 69c7dde1e3b98224684486f5c868e5639d3455f3 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Tue, 27 Dec 2011 15:14:08 +0000 Subject: [PATCH] Fix SD-1874 - Attribute code completion not working for assemblies that reference assemblies using a different .NET framework version to those referenced by the project. --- .../ParserService/ParseProjectContent.cs | 4 +-- .../ReflectionProjectContent.cs | 25 +++++++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs index 0408e9b9ee..6f37e81609 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs @@ -104,7 +104,7 @@ namespace ICSharpCode.SharpDevelop } foreach (IProjectContent referencedContent in referencedContents) { if (referencedContent is ReflectionProjectContent) { - ((ReflectionProjectContent)referencedContent).InitializeReferences(); + ((ReflectionProjectContent)referencedContent).InitializeReferences(referencedContents); } } } @@ -262,7 +262,7 @@ namespace ICSharpCode.SharpDevelop foreach (IProjectContent referencedContent in referencedContents) { if (referencedContent is ReflectionProjectContent) { - ((ReflectionProjectContent)referencedContent).InitializeReferences(); + ((ReflectionProjectContent)referencedContent).InitializeReferences(referencedContents); } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs index 8de31d3e1c..4896723b54 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs @@ -4,8 +4,8 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Reflection; - using ICSharpCode.SharpDevelop.Dom.ReflectionLayer; namespace ICSharpCode.SharpDevelop.Dom @@ -162,12 +162,17 @@ namespace ICSharpCode.SharpDevelop.Dom List missingNames; public void InitializeReferences() + { + InitializeReferences(new IProjectContent[0]); + } + + public void InitializeReferences(IProjectContent[] existingContents) { bool changed = false; if (initialized) { if (missingNames != null) { for (int i = 0; i < missingNames.Count; i++) { - IProjectContent content = registry.GetExistingProjectContent(missingNames[i]); + IProjectContent content = GetExistingProjectContent(existingContents, missingNames[i]); if (content != null) { changed = true; lock (ReferencedContents) { @@ -200,6 +205,22 @@ namespace ICSharpCode.SharpDevelop.Dom OnReferencedContentsChanged(EventArgs.Empty); } + IProjectContent GetExistingProjectContent(IProjectContent[] existingProjectContents, DomAssemblyName fullAssemblyName) + { + IProjectContent content = registry.GetExistingProjectContent(fullAssemblyName); + if (content != null) { + return content; + } else if (existingProjectContents.Any()) { + return GetExistingProjectContentForShortName(existingProjectContents, fullAssemblyName.ShortName); + } + return null; + } + + IProjectContent GetExistingProjectContentForShortName(IProjectContent[] existingProjectContents, string shortName) + { + return existingProjectContents.FirstOrDefault(pc => pc.AssemblyName == shortName); + } + public override string ToString() { return string.Format("[{0}: {1}]", GetType().Name, assemblyFullName);