Browse Source

- split ProjectResourceService

- split TypeResolutionService
- wrap ICSharpCode.Core utilities in IMessageService
formsdesignerappdomain
Siegfried Pammer 15 years ago
parent
commit
629b89e42a
  1. 5
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerViewContent.cs
  2. 8
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj
  3. 126
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs
  4. 29
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs
  5. 15
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ProjectResourceService.cs
  6. 0
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/UIService.cs
  7. 3
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
  8. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IDesignerGenerator.cs
  9. 10
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/LoggingService.cs
  10. 24
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs
  11. 25
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ITypeLocator.cs
  12. 10
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs
  13. 5
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesComponentCodeDomSerializer.cs
  14. 126
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs

5
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerViewContent.cs

@ -263,6 +263,7 @@ namespace ICSharpCode.FormsDesigner @@ -263,6 +263,7 @@ namespace ICSharpCode.FormsDesigner
LoggingService.Info("Form Designer: BEGIN INITIALIZE");
DefaultServiceContainer serviceContainer = new DefaultServiceContainer();
serviceContainer.AddService(typeof(IMessageService), new FormsMessageService());
serviceContainer.AddService(typeof(System.Windows.Forms.Design.IUIService), new UIService());
serviceContainer.AddService(typeof(System.Drawing.Design.IToolboxService), ToolboxProvider.ToolboxService);
@ -272,12 +273,12 @@ namespace ICSharpCode.FormsDesigner @@ -272,12 +273,12 @@ namespace ICSharpCode.FormsDesigner
serviceContainer.AddService(typeof(System.ComponentModel.Design.IResourceService), new DesignerResourceService(this.resourceStore));
AmbientProperties ambientProperties = new AmbientProperties();
serviceContainer.AddService(typeof(AmbientProperties), ambientProperties);
this.typeResolutionService = new TypeResolutionService(this.PrimaryFileName);
this.typeResolutionService = new TypeResolutionService(this.PrimaryFileName, serviceContainer, new DomTypeLocator(this.PrimaryFileName));
serviceContainer.AddService(typeof(ITypeResolutionService), this.typeResolutionService);
serviceContainer.AddService(typeof(DesignerOptionService), new SharpDevelopDesignerOptionService());
serviceContainer.AddService(typeof(ITypeDiscoveryService), new TypeDiscoveryService());
serviceContainer.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService());
serviceContainer.AddService(typeof(ProjectResourceService), new ProjectResourceService(ParserService.GetParseInformation(this.DesignerCodeFile.FileName).CompilationUnit.ProjectContent));
serviceContainer.AddService(typeof(IProjectResourceService), new ProjectResourceService(ParserService.GetParseInformation(this.DesignerCodeFile.FileName).CompilationUnit.ProjectContent));
// Provide the ImageResourceEditor for all Image and Icon properties
this.addedTypeDescriptionProviders.Add(typeof(Image), TypeDescriptor.AddAttributes(typeof(Image), new EditorAttribute(typeof(ImageResourceEditor), typeof(System.Drawing.Design.UITypeEditor))));

8
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj

@ -79,9 +79,12 @@ @@ -79,9 +79,12 @@
<Compile Include="OptionPanels\LocalizationModelOptionsPanel.cs" />
<Compile Include="SecondaryDisplayBinding.cs" />
<Compile Include="Services\DesignerResourceService.cs" />
<Compile Include="Services\DomTypeLocator.cs" />
<Compile Include="Services\HelpService.cs" />
<Compile Include="Services\FormsMessageService.cs" />
<Compile Include="Services\ProjectResourceService.cs" />
<Compile Include="Services\ResourceStore.cs" />
<Compile Include="Services\UIService.cs" />
<Compile Include="Toolbox\AddComponentsDialog.cs">
<SubType>Form</SubType>
</Compile>
@ -107,6 +110,11 @@ @@ -107,6 +110,11 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">
<Project>{924EE450-603D-49C1-A8E5-4AFAA31CE6F3}</Project>
<Name>ICSharpCode.SharpDevelop.Dom</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\Project\FormsDesigner.csproj">
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project>
<Name>FormsDesigner</Name>

126
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs

@ -0,0 +1,126 @@ @@ -0,0 +1,126 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.FormsDesigner.Services
{
public class DomTypeLocator : ITypeLocator
{
string formSourceFileName;
IProjectContent callingProject;
public System.ComponentModel.Design.ITypeResolutionService ParentService { get; set; }
/// <summary>
/// Gets the project content of the project that created this TypeResolutionService.
/// Returns null when no calling project was specified.
/// </summary>
public IProjectContent CallingProject {
get {
if (formSourceFileName != null) {
if (ProjectService.OpenSolution != null) {
IProject p = ProjectService.OpenSolution.FindProjectContainingFile(formSourceFileName);
if (p != null) {
callingProject = ParserService.GetProjectContent(p);
}
}
formSourceFileName = null;
}
return callingProject;
}
}
public DomTypeLocator(string formSourceFileName)
{
this.formSourceFileName = formSourceFileName;
}
static readonly Dictionary<IProjectContent, object> projectContentsCurrentlyLoadingAssembly = new Dictionary<IProjectContent, object>();
public string LocateType(string name, out string[] referencedAssemblies)
{
IProjectContent pc = CallingProject;
if (pc != null) {
// find assembly containing type by using SharpDevelop.Dom
IClass foundClass;
if (name.Contains("`")) {
int typeParameterCount;
int.TryParse(name.Substring(name.IndexOf('`') + 1), out typeParameterCount);
foundClass = pc.GetClass(name.Substring(0, name.IndexOf('`')).Replace('+', '.'), typeParameterCount);
} else {
foundClass = pc.GetClass(name.Replace('+', '.'), 0);
}
if (foundClass != null) {
string path = GetPathToAssembly(pc);
if (string.IsNullOrEmpty(path)) {
referencedAssemblies = new string[0];
return "";
}
List<string> assemblies = new List<string>();
FindReferencedAssemblies(assemblies, pc);
if (assemblies.Contains(path))
assemblies.Remove(path);
referencedAssemblies = assemblies.ToArray();
return path;
}
}
referencedAssemblies = new string[0];
return "";
}
void FindReferencedAssemblies(List<string> assemblies, IProjectContent pc)
{
// prevent StackOverflow when project contents have cyclic dependencies
// Very popular example of cyclic dependency: System <-> System.Xml (yes, really!)
if (projectContentsCurrentlyLoadingAssembly.ContainsKey(pc))
return;
projectContentsCurrentlyLoadingAssembly.Add(pc, null);
string path = GetPathToAssembly(assemblies, pc);
if (!string.IsNullOrEmpty(path) && !assemblies.Contains(path))
assemblies.Add(path);
try {
// load dependencies of current assembly
foreach (IProjectContent rpc in pc.ReferencedContents) {
if (rpc is ParseProjectContent) {
FindReferencedAssemblies(assemblies, rpc);
} else if (rpc is ReflectionProjectContent) {
ReflectionProjectContent rrpc = (ReflectionProjectContent)rpc;
if (!GacInterop.IsWithinGac(rrpc.AssemblyLocation))
FindReferencedAssemblies(assemblies, rpc);
}
}
} finally {
projectContentsCurrentlyLoadingAssembly.Remove(pc);
}
}
string GetPathToAssembly(IProjectContent pc)
{
if (pc.Project != null)
return ((IProject)pc.Project).OutputAssemblyFullPath;
else if (pc is ReflectionProjectContent)
return ((ReflectionProjectContent)pc).AssemblyLocation;
return null;
}
public bool IsGacAssembly(string path)
{
return GacInterop.IsWithinGac(path);
}
}
}

29
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Core;
namespace ICSharpCode.FormsDesigner.Services
{
/// <summary>
/// Description of MessageService.
/// </summary>
public class FormsMessageService : IMessageService
{
public void ShowOutputPad()
{
WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)).BringPadToFront();
}
public void AppendTextToBuildMessages(string text)
{
TaskService.BuildMessageViewCategory.AppendText(StringParser.Parse(text));
}
public void ShowException(Exception ex, string message)
{
MessageService.ShowException(ex, message);
}
}
}

15
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ProjectResourceService.cs

@ -16,10 +16,8 @@ namespace ICSharpCode.FormsDesigner.Services @@ -16,10 +16,8 @@ namespace ICSharpCode.FormsDesigner.Services
/// <summary>
/// Supports project-level resources in the Windows.Forms designer.
/// </summary>
public sealed class ProjectResourceService
public sealed class ProjectResourceService : IProjectResourceService
{
public const string ProjectResourceKey = "SDProjectResource_";
IProjectContent projectContent;
string stringLiteralDelimiter;
bool designerSupportsProjectResources = true;
@ -48,6 +46,10 @@ namespace ICSharpCode.FormsDesigner.Services @@ -48,6 +46,10 @@ namespace ICSharpCode.FormsDesigner.Services
set { designerSupportsProjectResources = value; }
}
public string ProjectResourceKey {
get { return "SDProjectResource_"; }
}
/// <summary>
/// Gets the string literal delimiter for the current language
/// by generating code for a known literal.
@ -167,12 +169,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -167,12 +169,7 @@ namespace ICSharpCode.FormsDesigner.Services
return false;
}
IReturnType generatedCodeAttribute = generatedCodeAttributeClass.DefaultReturnType;
return @class.Attributes.Any(
att =>
att.AttributeType.Equals(generatedCodeAttribute) &&
att.PositionalArguments.Count == 2 &&
String.Equals("System.Resources.Tools.StronglyTypedResourceBuilder", att.PositionalArguments[0] as string, StringComparison.Ordinal)
);
return @class.Attributes.Any(att => att.AttributeType.Equals(generatedCodeAttribute) && att.PositionalArguments.Count == 2 && String.Equals("System.Resources.Tools.StronglyTypedResourceBuilder", att.PositionalArguments[0] as string, StringComparison.Ordinal));
}
}
}

0
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/UIService.cs → src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/UIService.cs

3
src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj

@ -70,6 +70,8 @@ @@ -70,6 +70,8 @@
<Compile Include="Src\Services\DesignerOptionService.cs" />
<Compile Include="Src\Services\EventBindingService.cs" />
<Compile Include="Src\Services\ImageResourceEditor.cs" />
<Compile Include="Src\Services\IProjectResourceService.cs" />
<Compile Include="Src\Services\ITypeLocator.cs" />
<Compile Include="Src\Services\MenuCommandService.cs" />
<Compile Include="Src\Services\ProjectResourceInfo.cs" />
<Compile Include="Src\Services\ProjectResourcesComponentCodeDomSerializer.cs" />
@ -78,7 +80,6 @@ @@ -78,7 +80,6 @@
<Compile Include="Src\Services\SharpDevelopSerializationProvider.cs" />
<Compile Include="Src\Services\ToolboxService.cs" />
<Compile Include="Src\Services\TypeResolutionService.cs" />
<Compile Include="Src\Services\UIService.cs" />
<Compile Include="Src\Services\XmlDesignerNameCreationService.cs" />
<Compile Include="Src\DesignerLoader\DesignerLoaderProvider.cs" />
<Compile Include="Src\DesignerLoader\FormsDesignerLoadException.cs" />

1
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IDesignerGenerator.cs

@ -32,5 +32,6 @@ namespace ICSharpCode.FormsDesigner @@ -32,5 +32,6 @@ namespace ICSharpCode.FormsDesigner
bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out string file, out int position);
ICollection GetCompatibleMethods(EventDescriptor edesc);
void NotifyFormRenamed(string newName);
CodeDomProvider CodeDomProvider { get; }
}
}

10
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/LoggingService.cs

@ -31,5 +31,15 @@ namespace ICSharpCode.FormsDesigner @@ -31,5 +31,15 @@ namespace ICSharpCode.FormsDesigner
{
throw new NotImplementedException();
}
public static void DebugFormatted(string format, params object[] args)
{
throw new NotImplementedException();
}
public static void WarnFormatted(string format, params object[] args)
{
throw new NotImplementedException();
}
}
}

24
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom;
using System.IO;
using System.Linq;
namespace ICSharpCode.FormsDesigner.Services
{
public interface IProjectResourceService
{
ProjectResourceInfo GetProjectResource(CodePropertyReferenceExpression propRef);
bool DesignerSupportsProjectResources { get; set; }
string ProjectResourceKey { get; set; }
}
public interface IMessageService
{
void ShowOutputPad();
void AppendTextToBuildMessages(string text);
void ShowException(Exception ex, string message);
}
}

25
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ITypeLocator.cs

@ -0,0 +1,25 @@ @@ -0,0 +1,25 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.FormsDesigner.Services
{
public struct AssemblyInfo
{
public readonly string FullNameOrPath;
public readonly bool IsInGac;
public AssemblyInfo(string fullNameOrPath, bool isInGac)
{
this.FullNameOrPath = fullNameOrPath;
this.IsInGac = isInGac;
}
}
public interface ITypeLocator
{
AssemblyInfo LocateType(string name, out AssemblyInfo[] referencedAssemblies);
bool IsWithinGac(string path);
}
}

10
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs

@ -33,7 +33,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -33,7 +33,7 @@ namespace ICSharpCode.FormsDesigner.Services
if (typeof(Image).IsAssignableFrom(context.PropertyDescriptor.PropertyType) ||
typeof(Icon).IsAssignableFrom(context.PropertyDescriptor.PropertyType)) {
if (context.GetService(typeof(ProjectResourceService)) is ProjectResourceService) {
if (context.GetService(typeof(IProjectResourceService)) is IProjectResourceService) {
return UITypeEditorEditStyle.Modal;
}
@ -59,7 +59,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -59,7 +59,7 @@ namespace ICSharpCode.FormsDesigner.Services
}
}
var prs = provider.GetService(typeof(ProjectResourceService)) as ProjectResourceService;
var prs = provider.GetService(typeof(IProjectResourceService)) as IProjectResourceService;
if (prs == null) {
return value;
}
@ -74,7 +74,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -74,7 +74,7 @@ namespace ICSharpCode.FormsDesigner.Services
throw new InvalidOperationException("The required IDictionaryService is not available.");
}
var projectResource = dictService.GetValue(ProjectResourceService.ProjectResourceKey + context.PropertyDescriptor.Name) as ProjectResourceInfo;
var projectResource = dictService.GetValue(prs.ProjectResourceKey + context.PropertyDescriptor.Name) as ProjectResourceInfo;
IProject project = prs.ProjectContent.Project as IProject;
ImageResourceEditorDialog dialog;
@ -95,7 +95,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -95,7 +95,7 @@ namespace ICSharpCode.FormsDesigner.Services
if (edsvc.ShowDialog(dialog) == DialogResult.OK) {
projectResource = dialog.SelectedProjectResource;
if (projectResource != null) {
dictService.SetValue(ProjectResourceService.ProjectResourceKey + context.PropertyDescriptor.Name, projectResource);
dictService.SetValue(prs.ProjectResourceKey + context.PropertyDescriptor.Name, projectResource);
// Ensure the resource generator is turned on for the selected resource file.
if (project != null) {
@ -114,7 +114,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -114,7 +114,7 @@ namespace ICSharpCode.FormsDesigner.Services
return projectResource.OriginalValue;
} else {
dictService.SetValue(ProjectResourceService.ProjectResourceKey + context.PropertyDescriptor.Name, null);
dictService.SetValue(prs.ProjectResourceKey + context.PropertyDescriptor.Name, null);
return dialog.SelectedResourceValue;
}
}

5
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesComponentCodeDomSerializer.cs

@ -185,7 +185,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -185,7 +185,7 @@ namespace ICSharpCode.FormsDesigner.Services
static ProjectResourceInfo GetProjectResourceFromPropertyReference(IDesignerSerializationManager manager, CodePropertyReferenceExpression propRefSource)
{
ProjectResourceService prs = manager.GetService(typeof(ProjectResourceService)) as ProjectResourceService;
IProjectResourceService prs = manager.GetService(typeof(IProjectResourceService)) as IProjectResourceService;
if (prs == null) {
throw new InvalidOperationException("The required ProjectResourceService is not available.");
}
@ -195,11 +195,12 @@ namespace ICSharpCode.FormsDesigner.Services @@ -195,11 +195,12 @@ namespace ICSharpCode.FormsDesigner.Services
static void StoreResourceInfo(IComponent component, string propertyName, ProjectResourceInfo resourceInfo)
{
IProjectResourceService prs = manager.GetService(typeof(IProjectResourceService)) as IProjectResourceService;
var dictService = component.Site.GetService(typeof(IDictionaryService)) as IDictionaryService;
if (dictService == null) {
throw new InvalidOperationException("The required IDictionaryService is not available on component '" + component.ToString() + "'.");
}
dictService.SetValue(ProjectResourceService.ProjectResourceKey + propertyName, resourceInfo);
dictService.SetValue(prs.ProjectResourceKey + propertyName, resourceInfo);
}
#region Default overrides redirecting to baseSerializer

126
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs

@ -32,13 +32,12 @@ namespace ICSharpCode.FormsDesigner.Services @@ -32,13 +32,12 @@ namespace ICSharpCode.FormsDesigner.Services
static TypeResolutionService()
{
ClearMixedAssembliesTemporaryFiles();
DesignerAssemblies.Add(ProjectContentRegistry.MscorlibAssembly);
DesignerAssemblies.Add(ProjectContentRegistry.SystemAssembly);
DesignerAssemblies.Add(typeof(object).Assembly);
DesignerAssemblies.Add(typeof(System.Uri).Assembly);
DesignerAssemblies.Add(typeof(System.Drawing.Point).Assembly);
DesignerAssemblies.Add(typeof(System.Windows.Forms.Design.AnchorEditor).Assembly);
RegisterVSDesignerWorkaround();
AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolveEventHandler;
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
@ -69,89 +68,26 @@ namespace ICSharpCode.FormsDesigner.Services @@ -69,89 +68,26 @@ namespace ICSharpCode.FormsDesigner.Services
string formSourceFileName;
ServiceContainer serviceContainer;
ITypeLocator typeLocator;
/// <summary>
/// Dictionary of file name -> hash of loaded assemblies for the currently designed document.
/// Used to detect changes in references assemblies.
/// </summary>
readonly Dictionary<string, string> loadedAssembliesForCurrentDocument = new Dictionary<string, string>(StringComparer.Ordinal);
/*
IProjectContent callingProject;
/// <summary>
/// Gets the project content of the project that created this TypeResolutionService.
/// Returns null when no calling project was specified.
/// </summary>
public IProjectContent CallingProject {
get {
if (formSourceFileName != null) {
if (ProjectService.OpenSolution != null) {
IProject p = ProjectService.OpenSolution.FindProjectContainingFile(formSourceFileName);
if (p != null) {
callingProject = ParserService.GetProjectContent(p);
}
}
formSourceFileName = null;
}
return callingProject;
}
}*/
public TypeResolutionService()
{
}
public TypeResolutionService(string formSourceFileName)
public TypeResolutionService(string formSourceFileName, ServiceContainer serviceContainer, ITypeLocator typeLocator)
{
this.formSourceFileName = formSourceFileName;
this.serviceContainer = serviceContainer;
this.typeLocator = typeLocator;
}
/*
static readonly Dictionary<IProjectContent, object> projectContentsCurrentlyLoadingAssembly = new Dictionary<IProjectContent, object>();
/// <summary>
/// Loads the assembly represented by the project content. Returns null on failure.
/// </summary>
public Assembly LoadAssembly(IProjectContent pc)
{
// prevent StackOverflow when project contents have cyclic dependencies
// Very popular example of cyclic dependency: System <-> System.Xml (yes, really!)
if (projectContentsCurrentlyLoadingAssembly.ContainsKey(pc))
return null;
projectContentsCurrentlyLoadingAssembly.Add(pc, null);
try {
// load dependencies of current assembly
foreach (IProjectContent rpc in pc.ReferencedContents) {
if (rpc is ParseProjectContent) {
LoadAssembly(rpc);
} else if (rpc is ReflectionProjectContent) {
ReflectionProjectContent rrpc = (ReflectionProjectContent)rpc;
if (rrpc.AssemblyFullName != typeof(object).FullName
&& !GacInterop.IsWithinGac(rrpc.AssemblyLocation))
{
LoadAssembly(rpc);
}
}
}
} finally {
projectContentsCurrentlyLoadingAssembly.Remove(pc);
}
if (pc.Project != null) {
return LoadAssembly(((IProject)pc.Project).OutputAssemblyFullPath);
} else if (pc is ReflectionProjectContent) {
ReflectionProjectContent rpc = (ReflectionProjectContent)pc;
if (GacInterop.IsWithinGac(rpc.AssemblyLocation))
return LoadAssembly(new AssemblyName(rpc.AssemblyFullName), false);
else
return LoadAssembly(rpc.AssemblyLocation);
} else {
return null;
}
}
*/
static string GetHash(string fileName)
{
return Path.GetFileName(fileName).ToLowerInvariant() + File.GetLastWriteTimeUtc(fileName).Ticks.ToString();
@ -191,6 +127,8 @@ namespace ICSharpCode.FormsDesigner.Services @@ -191,6 +127,8 @@ namespace ICSharpCode.FormsDesigner.Services
}
}
IMessageService messenger = serviceContainer.GetService(typeof(IMessageService)) as IMessageService;
string hash = GetHash(fileName);
lock (assemblyDict) {
Assembly asm;
@ -223,7 +161,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -223,7 +161,7 @@ namespace ICSharpCode.FormsDesigner.Services
asm.LoadModule(Path.GetFileName(fileName), File.ReadAllBytes(fileName));
}
} catch (Exception ex) {
MessageService.ShowException(ex, "Error calling linker for netmodule");
messenger.ShowException(ex, "Error calling linker for netmodule");
}
try {
File.Delete(tempPath);
@ -234,11 +172,8 @@ namespace ICSharpCode.FormsDesigner.Services @@ -234,11 +172,8 @@ namespace ICSharpCode.FormsDesigner.Services
// The error might be caused by an assembly that is
// not even needed for the designer to load.
LoggingService.Error("Error loading assembly " + fileName, e);
WorkbenchSingleton.Workbench.GetPad(typeof(CompilerMessageView)).BringPadToFront();
TaskService.BuildMessageViewCategory.AppendText(
StringParser.Parse("${res:FileUtilityService.ErrorWhileLoading}")
+ "\r\n" + fileName + "\r\n" + e.Message + "\r\n"
);
messenger.ShowOutputPad();
messenger.AppendTextToBuildMessages("${res:FileUtilityService.ErrorWhileLoading}\r\n" + fileName + "\r\n" + e.Message + "\r\n");
return null;
}
} catch (FileLoadException e) {
@ -354,28 +289,27 @@ namespace ICSharpCode.FormsDesigner.Services @@ -354,28 +289,27 @@ namespace ICSharpCode.FormsDesigner.Services
}
#endif
try {
Type type = Type.GetType(name, false, ignoreCase);
if (type == null) {
IProjectContent pc = this.CallingProject;
if (pc != null) {
// find assembly containing type by using SharpDevelop.Dom
IClass foundClass;
if (name.Contains("`")) {
int typeParameterCount;
int.TryParse(name.Substring(name.IndexOf('`') + 1), out typeParameterCount);
foundClass = pc.GetClass(name.Substring(0, name.IndexOf('`')).Replace('+', '.'), typeParameterCount);
} else {
foundClass = pc.GetClass(name.Replace('+', '.'), 0);
}
if (foundClass != null) {
Assembly assembly = LoadAssembly(foundClass.ProjectContent);
if (assembly != null) {
type = assembly.GetType(name, false, ignoreCase);
}
}
AssemblyInfo[] assemblies;
AssemblyInfo assemblyInfo = typeLocator.LocateType(name, out assemblies);
foreach (AssemblyInfo a in assemblies) {
if (a.IsInGac)
LoadAssembly(new AssemblyName(a.FullNameOrPath), false);
else
LoadAssembly(a.FullNameOrPath);
}
Assembly assembly;
if (assemblyInfo.IsInGac)
assembly = LoadAssembly(new AssemblyName(assemblyInfo.FullNameOrPath), false);
else
assembly = LoadAssembly(assemblyInfo.FullNameOrPath);
if (assembly != null)
type = assembly.GetType(name, throwOnError, ignoreCase);
}
// type lookup for typename, assembly, xyz style lookups

Loading…
Cancel
Save