Browse Source

fixed FormsDesigner.AddIn - all code is now separated

formsdesignerappdomain
Siegfried Pammer 15 years ago
parent
commit
58a5eea478
  1. 10
      src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
  2. 6
      src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj
  3. 10
      src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj
  4. 6
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/AbstractDesignerGenerator.cs
  5. 25
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/IDesignerSourceProvider.cs
  6. 31
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/AbstractCodeDomDesignerLoader.cs
  7. 15
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/DesignerLoaderProvider.cs
  8. 32
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/NRefactoryDesignerLoader.cs
  9. 21
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesigner.AddIn.csproj
  10. 69
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs
  11. 22
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/ImageResourceEditorDialog.cs
  12. 6
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs
  13. 1
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DesignerResourceService.cs
  14. 44
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DomTypeLocator.cs
  15. 2
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/FormsMessageService.cs
  16. 57
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/ProjectResourceService.cs
  17. 65
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs
  18. 2
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/UIService.cs
  19. 46
      src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/CustomComponentsSideTab.cs
  20. 9
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
  21. 3
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/IDesignerLoader.cs
  22. 11
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs
  23. 56
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs
  24. 16
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/IDesignerGenerator.cs
  25. 55
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/AssemblyInfo.cs
  26. 19
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerOptionService.cs
  27. 10
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/IProjectResourceService.cs
  28. 20
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ITypeLocator.cs
  29. 4
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs
  30. 48
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs
  31. 46
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs
  32. 6
      src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.AddIn.csproj
  33. 7
      src/AddIns/Misc/SharpRefactoring/Project/Src/CSharpMethodExtractor.cs
  34. 727
      src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/EasyCodeDom.cs

10
src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj

@ -134,6 +134,11 @@ @@ -134,6 +134,11 @@
<Name>NRefactory</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\DisplayBindings\FormsDesigner\FormsDesigner.AddIn\FormsDesigner.AddIn.csproj">
<Project>{53840EAB-984D-419F-A2A2-6D13C3F3D5B4}</Project>
<Name>FormsDesigner.AddIn</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\NRefactoryToBooConverter\Project\NRefactoryToBooConverter.csproj">
<Project>{DBCF20A1-BA13-4582-BFA9-74DE4D987B73}</Project>
<Name>NRefactoryToBooConverter</Name>
@ -150,11 +155,6 @@ @@ -150,11 +155,6 @@
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="PostBuildEvent.proj" />
<ProjectReference Include="..\..\..\..\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj">
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project>
<Name>FormsDesigner</Name>
<Private>False</Private>
</ProjectReference>
<Folder Include="Configuration" />
<Folder Include="Resources" />
<ProjectReference Include="..\..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\ICSharpCode.SharpDevelop.Dom.csproj">

6
src/AddIns/BackendBindings/Scripting/Project/ICSharpCode.Scripting.csproj

@ -136,9 +136,9 @@ @@ -136,9 +136,9 @@
<Name>UnitTesting</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj">
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project>
<Name>FormsDesigner</Name>
<ProjectReference Include="..\..\..\DisplayBindings\FormsDesigner\FormsDesigner.AddIn\FormsDesigner.AddIn.csproj">
<Project>{53840EAB-984D-419F-A2A2-6D13C3F3D5B4}</Project>
<Name>FormsDesigner.AddIn</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>

10
src/AddIns/BackendBindings/WixBinding/Project/WixBinding.csproj

@ -223,11 +223,6 @@ @@ -223,11 +223,6 @@
<Name>AvalonEdit.AddIn</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj">
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project>
<Name>FormsDesigner</Name>
<Private>False</Private>
</ProjectReference>
<Content Include="Templates\EmptyWixFile.xft">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
@ -256,6 +251,11 @@ @@ -256,6 +251,11 @@
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\DisplayBindings\FormsDesigner\FormsDesigner.AddIn\FormsDesigner.AddIn.csproj">
<Project>{53840EAB-984D-419F-A2A2-6D13C3F3D5B4}</Project>
<Name>FormsDesigner.AddIn</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">

6
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/AbstractDesignerGenerator.cs

@ -20,7 +20,7 @@ using ReflectionLayer = ICSharpCode.SharpDevelop.Dom.ReflectionLayer; @@ -20,7 +20,7 @@ using ReflectionLayer = ICSharpCode.SharpDevelop.Dom.ReflectionLayer;
namespace ICSharpCode.FormsDesigner
{
public abstract class AbstractDesignerGenerator : IDesignerGenerator
public abstract class AbstractDesignerGenerator : IDesignerGenerator, IDesignerSourceProvider
{
/// <summary>The currently open part of the class being designed.</summary>
IClass currentClassPart;
@ -582,4 +582,8 @@ namespace ICSharpCode.FormsDesigner @@ -582,4 +582,8 @@ namespace ICSharpCode.FormsDesigner
return null;
}
}
}

25
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerGenerator/IDesignerSourceProvider.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;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.FormsDesigner
{
public interface IDesignerSourceProvider
{
void Attach(FormsDesignerViewContent viewContent);
void Detach();
FormsDesignerViewContent ViewContent { get; }
/// <summary>
/// Gets the collection of OpenedFiles that contain code which belongs
/// to the designed form, not including resource files.
/// </summary>
/// <param name="designerCodeFile">Receives the file which contains the code to be modified by the forms designer.</param>
/// <returns>A collection of OpenedFiles that contain code which belongs to the designed form.</returns>
/// <remarks>The returned collection must include the <paramref name="designerCodeFile"/>.</remarks>
IEnumerable<OpenedFile> GetSourceFiles(out OpenedFile designerCodeFile);
}
}

31
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/AbstractCodeDomDesignerLoader.cs

@ -2,14 +2,22 @@ @@ -2,14 +2,22 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ComponentModel.Design.Serialization;
namespace ICSharpCode.FormsDesigner
{
/// <summary>
/// Description of AbstractCodeDomDesignerLoader.
/// </summary>
public class AbstractCodeDomDesignerLoader : IDesignerLoader
public abstract class AbstractCodeDomDesignerLoader : IDesignerLoader
{
protected AbstractCodeDomDesignerLoader(IDesignerGenerator generator)
{
this.Generator = generator;
}
public IDesignerGenerator Generator { get; set; }
/// <summary>
/// When overridden in derived classes, this method should return the current
/// localization model of the designed file or None, if it cannot be determined.
@ -20,15 +28,9 @@ namespace ICSharpCode.FormsDesigner @@ -20,15 +28,9 @@ namespace ICSharpCode.FormsDesigner
return CodeDomLocalizationModel.None;
}
System.CodeDom.CodeCompileUnit IDesignerLoader.Parse()
{
throw new NotImplementedException();
}
public abstract System.CodeDom.CodeCompileUnit Parse();
void IDesignerLoader.Write(System.CodeDom.CodeCompileUnit unit)
{
throw new NotImplementedException();
}
public abstract void Write(System.CodeDom.CodeCompileUnit unit);
CodeDomLocalizationModel IDesignerLoader.GetLocalizationModel()
{
@ -38,15 +40,20 @@ namespace ICSharpCode.FormsDesigner @@ -38,15 +40,20 @@ namespace ICSharpCode.FormsDesigner
// Try to find out the current localization model of the designed form
CodeDomLocalizationModel existingModel = this.GetCurrentLocalizationModelFromDesignedFile();
if (existingModel != CodeDomLocalizationModel.None) {
LoggingService.Debug("Determined existing localization model, using that: " + existingModel.ToString());
Core.LoggingService.Debug("Determined existing localization model, using that: " + existingModel.ToString());
model = existingModel;
} else {
LoggingService.Debug("Could not determine existing localization model, using default: " + model.ToString());
Core.LoggingService.Debug("Could not determine existing localization model, using default: " + model.ToString());
}
} else {
LoggingService.Debug("Using default localization model: " + model.ToString());
Core.LoggingService.Debug("Using default localization model: " + model.ToString());
}
return model;
}
public virtual bool IsReloadNeeded(bool value)
{
return value;
}
}
}

15
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/DesignerLoaderProvider.cs → src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/DesignerLoaderProvider.cs

@ -3,29 +3,32 @@ @@ -3,29 +3,32 @@
using System;
using System.ComponentModel.Design.Serialization;
/*
using ICSharpCode.NRefactory;
namespace ICSharpCode.FormsDesigner
{
public interface IDesignerLoaderProvider
{
DesignerLoader CreateLoader(IDesignerGenerator generator);
IDesignerLoader CreateLoader(IDesignerGenerator generator);
FormsDesignerViewContent ViewContent { get; set; }
}
public class NRefactoryDesignerLoaderProvider : IDesignerLoaderProvider
{
readonly SupportedLanguage language;
FormsDesignerViewContent viewContent;
public FormsDesignerViewContent ViewContent { get; set; }
public NRefactoryDesignerLoaderProvider(SupportedLanguage language)
{
this.language = language;
}
public DesignerLoader CreateLoader(IDesignerGenerator generator)
public IDesignerLoader CreateLoader(IDesignerGenerator generator)
{
return new NRefactoryDesignerLoader(language, generator);
return new NRefactoryDesignerLoader(language, generator, ViewContent);
}
}
}
*/
}

32
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerLoader/NRefactoryDesignerLoader.cs

@ -3,12 +3,12 @@ @@ -3,12 +3,12 @@
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.ComponentModel.Design.Serialization;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Ast;
@ -22,16 +22,18 @@ namespace ICSharpCode.FormsDesigner @@ -22,16 +22,18 @@ namespace ICSharpCode.FormsDesigner
public class NRefactoryDesignerLoader : AbstractCodeDomDesignerLoader
{
SupportedLanguage language;
FormsDesignerViewContent viewContent;
protected override bool IsReloadNeeded()
public override bool IsReloadNeeded(bool value)
{
return base.IsReloadNeeded() || this.Generator.ViewContent.DesignerCodeFileContent != lastTextContent;
return base.IsReloadNeeded(value) || viewContent.DesignerCodeFileContent != lastTextContent;
}
public NRefactoryDesignerLoader(SupportedLanguage language, IDesignerGenerator generator)
public NRefactoryDesignerLoader(SupportedLanguage language, IDesignerGenerator generator, FormsDesignerViewContent viewContent)
: base(generator)
{
this.language = language;
this.viewContent = viewContent;
}
string lastTextContent;
@ -72,13 +74,13 @@ namespace ICSharpCode.FormsDesigner @@ -72,13 +74,13 @@ namespace ICSharpCode.FormsDesigner
// - Create CodeDom objects for fields and InitializeComponents statements
// - If debug build and Ctrl pressed, output CodeDom to console
// - Return CodeDom objects to the .NET designer
protected override CodeCompileUnit Parse()
public override CodeCompileUnit Parse()
{
LoggingService.Debug("NRefactoryDesignerLoader.Parse()");
lastTextContent = this.Generator.ViewContent.DesignerCodeFileContent;
lastTextContent = viewContent.DesignerCodeFileContent;
ParseInformation parseInfo = ParserService.GetParseInformation(this.Generator.ViewContent.DesignerCodeFile.FileName);
ParseInformation parseInfo = ParserService.GetParseInformation(viewContent.DesignerCodeFile.FileName);
IClass formClass;
bool isFirstClassInFile;
@ -114,10 +116,10 @@ namespace ICSharpCode.FormsDesigner @@ -114,10 +116,10 @@ namespace ICSharpCode.FormsDesigner
if (found) continue;
ITextBuffer fileContent;
if (FileUtility.IsEqualFileName(fileName, this.Generator.ViewContent.PrimaryFileName)) {
fileContent = this.Generator.ViewContent.PrimaryFileContent;
} else if (FileUtility.IsEqualFileName(fileName, this.Generator.ViewContent.DesignerCodeFile.FileName)) {
fileContent = new StringTextBuffer(this.Generator.ViewContent.DesignerCodeFileContent);
if (FileUtility.IsEqualFileName(fileName, viewContent.PrimaryFileName)) {
fileContent = viewContent.PrimaryFileContent;
} else if (FileUtility.IsEqualFileName(fileName, viewContent.DesignerCodeFile.FileName)) {
fileContent = new StringTextBuffer(viewContent.DesignerCodeFileContent);
} else {
fileContent = ParserService.GetParseableFileContent(fileName);
}
@ -172,7 +174,7 @@ namespace ICSharpCode.FormsDesigner @@ -172,7 +174,7 @@ namespace ICSharpCode.FormsDesigner
if ((Control.ModifierKeys & Keys.Control) == Keys.Control) {
CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator();
outputGenerator.GenerateCodeFromMember(visitor.codeCompileUnit.Namespaces[0].Types[0], Console.Out, null);
this.CodeDomProvider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, Console.Out, null);
this.Generator.CodeDomProvider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, Console.Out, null);
}
#endif
@ -262,13 +264,13 @@ namespace ICSharpCode.FormsDesigner @@ -262,13 +264,13 @@ namespace ICSharpCode.FormsDesigner
}
}
protected override void Write(CodeCompileUnit unit)
public override void Write(CodeCompileUnit unit)
{
LoggingService.Info("DesignerLoader.Write called");
// output generated CodeDOM to the console :
#if DEBUG
if ((Control.ModifierKeys & Keys.Control) == Keys.Control) {
this.CodeDomProvider.GenerateCodeFromCompileUnit(unit, Console.Out, null);
this.Generator.CodeDomProvider.GenerateCodeFromCompileUnit(unit, Console.Out, null);
}
#endif
try {
@ -280,7 +282,7 @@ namespace ICSharpCode.FormsDesigner @@ -280,7 +282,7 @@ namespace ICSharpCode.FormsDesigner
protected override CodeDomLocalizationModel GetCurrentLocalizationModelFromDesignedFile()
{
ParseInformation parseInfo = ParserService.ParseFile(this.Generator.ViewContent.DesignerCodeFile.FileName, new StringTextBuffer(this.Generator.ViewContent.DesignerCodeFileContent));
ParseInformation parseInfo = ParserService.ParseFile(viewContent.DesignerCodeFile.FileName, new StringTextBuffer(viewContent.DesignerCodeFileContent));
IClass formClass;
bool isFirstClassInFile;

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

@ -41,6 +41,7 @@ @@ -41,6 +41,7 @@
</Reference>
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.Drawing.Design" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml" />
@ -64,11 +65,13 @@ @@ -64,11 +65,13 @@
<Compile Include="DesignerGenerator\AbstractDesignerGenerator.cs" />
<Compile Include="DesignerGenerator\CodeDOMGenerator.cs" />
<Compile Include="DesignerGenerator\CSharpDesignerGenerator.cs" />
<Compile Include="DesignerGenerator\IDesignerSourceProvider.cs" />
<Compile Include="DesignerGenerator\VBNetDesignerGenerator.cs" />
<Compile Include="DesignerLoader\AbstractCodeDomDesignerLoader.cs" />
<Compile Include="DesignerLoader\DesignerLoaderProvider.cs" />
<Compile Include="DesignerLoader\NRefactoryDesignerLoader.cs" />
<Compile Include="DesignerSourceCodeStorage.cs" />
<Compile Include="DesignerViewContent.cs" />
<Compile Include="FormsDesignerViewContent.cs" />
<Compile Include="FormKeyHandler.cs" />
<Compile Include="ImageResourceEditorDialog.cs" />
<Compile Include="ImageResourceEditorDialog.Designer.cs">
@ -79,6 +82,7 @@ @@ -79,6 +82,7 @@
<Compile Include="OptionPanels\LocalizationModelOptionsPanel.cs" />
<Compile Include="SecondaryDisplayBinding.cs" />
<Compile Include="Services\DesignerResourceService.cs" />
<Compile Include="Services\SharpDevelopCommandProvider.cs" />
<Compile Include="Services\DomTypeLocator.cs" />
<Compile Include="Services\HelpService.cs" />
<Compile Include="Services\FormsMessageService.cs" />
@ -101,6 +105,11 @@ @@ -101,6 +105,11 @@
<Compile Include="Toolbox\ToolboxProvider.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj">
<Project>{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}</Project>
<Name>ICSharpCode.AvalonEdit</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\Project\NRefactory.csproj">
<Project>{3A9AE6AA-BC07-4A2F-972C-581E3AE2F195}</Project>
<Name>NRefactory</Name>
@ -115,11 +124,21 @@ @@ -115,11 +124,21 @@
<Name>ICSharpCode.Core</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\ICSharpCode.Core.WinForms\ICSharpCode.Core.WinForms.csproj">
<Project>{857CA1A3-FC88-4BE0-AB6A-D1EE772AB288}</Project>
<Name>ICSharpCode.Core.WinForms</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="..\..\..\..\Main\ICSharpCode.SharpDevelop.Widgets\Project\ICSharpCode.SharpDevelop.Widgets.csproj">
<Project>{8035765F-D51F-4A0C-A746-2FD100E19419}</Project>
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\Project\FormsDesigner.csproj">
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project>
<Name>FormsDesigner</Name>

69
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/DesignerViewContent.cs → src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/FormsDesignerViewContent.cs

@ -12,17 +12,19 @@ using System.IO; @@ -12,17 +12,19 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.FormsDesigner.Gui;
using ICSharpCode.FormsDesigner.Gui.OptionPanels;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.FormsDesigner.UndoRedo;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.FormsDesigner
{
public class FormsDesignerViewContent : AbstractViewContentHandlingLoadErrors, IClipboardHandler, IUndoHandler, IHasPropertyContainer, IContextHelpProvider, IToolsHost, IFileDocumentProvider
public class FormsDesignerViewContent : AbstractViewContentHandlingLoadErrors, IClipboardHandler, IUndoHandler, IHasPropertyContainer, IContextHelpProvider, IToolsHost, IFileDocumentProvider, IFormsDesigner
{
readonly Control pleaseWaitLabel = new Label() {Text=StringParser.Parse("${res:Global.PleaseWait}"), TextAlign=ContentAlignment.MiddleCenter};
DesignSurface designSurface;
@ -32,6 +34,7 @@ namespace ICSharpCode.FormsDesigner @@ -32,6 +34,7 @@ namespace ICSharpCode.FormsDesigner
readonly IDesignerLoaderProvider loaderProvider;
DesignerLoader loader;
readonly IDesignerGenerator generator;
readonly IDesignerSourceProvider sourceProvider;
readonly ResourceStore resourceStore;
FormsDesignerUndoEngine undoEngine;
TypeResolutionService typeResolutionService;
@ -124,7 +127,7 @@ namespace ICSharpCode.FormsDesigner @@ -124,7 +127,7 @@ namespace ICSharpCode.FormsDesigner
ICSharpCode.SharpDevelop.Debugging.DebuggerService.DebugStarting += this.DebugStarting;
}
public FormsDesignerViewContent(IViewContent primaryViewContent, IDesignerLoaderProvider loaderProvider, IDesignerGenerator generator)
public FormsDesignerViewContent(IViewContent primaryViewContent, IDesignerLoaderProvider loaderProvider, IDesignerGenerator generator, IDesignerSourceProvider sourceProvider)
: this(primaryViewContent)
{
if (loaderProvider == null)
@ -133,8 +136,10 @@ namespace ICSharpCode.FormsDesigner @@ -133,8 +136,10 @@ namespace ICSharpCode.FormsDesigner
throw new ArgumentNullException("generator");
this.loaderProvider = loaderProvider;
this.loaderProvider.ViewContent = this;
this.generator = generator;
this.generator.Attach(this);
this.sourceProvider = sourceProvider;
this.sourceProvider.Attach(this);
this.Files.Add(this.primaryViewContent.PrimaryFile);
}
@ -184,7 +189,7 @@ namespace ICSharpCode.FormsDesigner @@ -184,7 +189,7 @@ namespace ICSharpCode.FormsDesigner
LoggingService.Debug("Forms designer: Determining designer source files for " + file.FileName);
OpenedFile newDesignerCodeFile;
IEnumerable<OpenedFile> sourceFiles = this.generator.GetSourceFiles(out newDesignerCodeFile);
IEnumerable<OpenedFile> sourceFiles = this.sourceProvider.GetSourceFiles(out newDesignerCodeFile);
if (sourceFiles == null || newDesignerCodeFile == null) {
throw new FormsDesignerLoadException("The designer source files could not be determined.");
}
@ -262,9 +267,11 @@ namespace ICSharpCode.FormsDesigner @@ -262,9 +267,11 @@ namespace ICSharpCode.FormsDesigner
{
LoggingService.Info("Form Designer: BEGIN INITIALIZE");
options = LoadOptions();
DefaultServiceContainer serviceContainer = new DefaultServiceContainer();
serviceContainer.AddService(typeof(IMessageService), new FormsMessageService());
serviceContainer.AddService(typeof(System.Windows.Forms.Design.IUIService), new UIService());
serviceContainer.AddService(typeof(System.Windows.Forms.Design.IUIService), new UIService(this));
serviceContainer.AddService(typeof(System.Drawing.Design.IToolboxService), ToolboxProvider.ToolboxService);
serviceContainer.AddService(typeof(IHelpService), new HelpService());
@ -275,10 +282,11 @@ namespace ICSharpCode.FormsDesigner @@ -275,10 +282,11 @@ namespace ICSharpCode.FormsDesigner
serviceContainer.AddService(typeof(AmbientProperties), ambientProperties);
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(DesignerOptionService), new SharpDevelopDesignerOptionService(options));
serviceContainer.AddService(typeof(ITypeDiscoveryService), new TypeDiscoveryService(new DomGacWrapper()));
serviceContainer.AddService(typeof(MemberRelationshipService), new DefaultMemberRelationshipService());
serviceContainer.AddService(typeof(IProjectResourceService), new ProjectResourceService(ParserService.GetParseInformation(this.DesignerCodeFile.FileName).CompilationUnit.ProjectContent));
serviceContainer.AddService(typeof(IImageResourceEditorDialogWrapper), new ImageResourceEditorDialogWrapper(ParserService.GetParseInformation(this.DesignerCodeFile.FileName).CompilationUnit.ProjectContent.Project as IProject));
// 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))));
@ -294,11 +302,11 @@ namespace ICSharpCode.FormsDesigner @@ -294,11 +302,11 @@ namespace ICSharpCode.FormsDesigner
designSurface.Flushed += this.DesignerFlushed;
designSurface.Unloading += this.DesignerUnloading;
serviceContainer.AddService(typeof(System.ComponentModel.Design.IMenuCommandService), new ICSharpCode.FormsDesigner.Services.MenuCommandService(this, designSurface));
serviceContainer.AddService(typeof(System.ComponentModel.Design.IMenuCommandService), new ICSharpCode.FormsDesigner.Services.MenuCommandService(new SharpDevelopCommandProvider(this), designSurface));
ICSharpCode.FormsDesigner.Services.EventBindingService eventBindingService = new ICSharpCode.FormsDesigner.Services.EventBindingService(this, designSurface);
serviceContainer.AddService(typeof(System.ComponentModel.Design.IEventBindingService), eventBindingService);
this.loader = loaderProvider.CreateLoader(generator);
this.loader = new SharpDevelopDesignerLoader(generator, loaderProvider.CreateLoader(generator));
designSurface.BeginLoad(this.loader);
if (!designSurface.IsLoaded) {
@ -330,6 +338,28 @@ namespace ICSharpCode.FormsDesigner @@ -330,6 +338,28 @@ namespace ICSharpCode.FormsDesigner
LoggingService.Info("Form Designer: END INITIALIZE");
}
SharpDevelopDesignerOptions LoadOptions()
{
int w = PropertyService.Get("FormsDesigner.DesignerOptions.GridSizeWidth", 8);
int h = PropertyService.Get("FormsDesigner.DesignerOptions.GridSizeHeight", 8);
SharpDevelopDesignerOptions options = new SharpDevelopDesignerOptions();
options.GridSize = new Size(w, h);
options.ShowGrid = PropertyService.Get("FormsDesigner.DesignerOptions.ShowGrid", true);
options.SnapToGrid = PropertyService.Get("FormsDesigner.DesignerOptions.SnapToGrid", true);
options.UseSmartTags = GeneralOptionsPanel.UseSmartTags;
options.UseSnapLines = PropertyService.Get("FormsDesigner.DesignerOptions.UseSnapLines", true);
options.EnableInSituEditing = PropertyService.Get("FormsDesigner.DesignerOptions.EnableInSituEditing", true);
options.ObjectBoundSmartTagAutoShow = GeneralOptionsPanel.SmartTagAutoShow;
options.UseOptimizedCodeGeneration = PropertyService.Get("FormsDesigner.DesignerOptions.UseOptimizedCodeGeneration", true);
return options;
}
bool hasUnmergedChanges;
void MakeDirty()
@ -660,7 +690,7 @@ namespace ICSharpCode.FormsDesigner @@ -660,7 +690,7 @@ namespace ICSharpCode.FormsDesigner
}
if (this.generator != null) {
this.generator.Detach();
this.sourceProvider.Detach();
}
this.resourceStore.Dispose();
@ -941,5 +971,24 @@ namespace ICSharpCode.FormsDesigner @@ -941,5 +971,24 @@ namespace ICSharpCode.FormsDesigner
}
#endregion
public IDesignerGenerator Generator {
get {
return generator;
}
}
SharpDevelopDesignerOptions options;
public SharpDevelopDesignerOptions DesignerOptions {
get {
return options;
}
}
public IntPtr GetDialogOwnerWindowHandle()
{
return WorkbenchSingleton.MainWin32Window.Handle;
}
}
}

22
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/ImageResourceEditorDialog.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing;
using System.Drawing.Design;
using System.IO;
@ -11,12 +12,13 @@ using System.Linq; @@ -11,12 +12,13 @@ using System.Linq;
using System.Resources;
using System.Resources.Tools;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
@ -58,7 +60,7 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -58,7 +60,7 @@ namespace ICSharpCode.FormsDesigner.Gui
this.projectResourcesTreeView.Visible = designerSupportsProjectResources;
}
public ImageResourceEditorDialog(IProject project, Type requiredResourceType, ProjectResourceInfo projectResource)
public ImageResourceEditorDialog(IProject project, Type requiredResourceType, IProjectResourceInfo projectResource)
: this(project, requiredResourceType, true)
{
if (projectResource == null)
@ -214,7 +216,7 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -214,7 +216,7 @@ namespace ICSharpCode.FormsDesigner.Gui
return;
}
ProjectResourceInfo selectedProjectResource = e.Argument as ProjectResourceInfo;
IProjectResourceInfo selectedProjectResource = e.Argument as IProjectResourceInfo;
IProjectContent projectContent = ParserService.GetProjectContent(this.project);
@ -575,11 +577,19 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -575,11 +577,19 @@ namespace ICSharpCode.FormsDesigner.Gui
#endregion
}
public class ImageResourceEditorDialogWrapper
public class ImageResourceEditorDialogWrapper : IImageResourceEditorDialogWrapper
{
public object GetValue(IProjectResourceInfo projectResource, )
IProject project;
public ImageResourceEditorDialogWrapper(IProject project)
{
if (project == null)
throw new ArgumentNullException("project");
this.project = project;
}
public object GetValue(IProjectResourceInfo projectResource, object value, IProjectResourceService prs, ITypeDescriptorContext context, IWindowsFormsEditorService edsvc, IDictionaryService dictService)
{
IProject project = prs.ProjectContent.Project as IProject;
ImageResourceEditorDialog dialog;
if (projectResource != null && object.ReferenceEquals(projectResource.OriginalValue, value) && prs.DesignerSupportsProjectResources) {

6
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/SecondaryDisplayBinding.cs

@ -115,6 +115,7 @@ namespace ICSharpCode.FormsDesigner @@ -115,6 +115,7 @@ namespace ICSharpCode.FormsDesigner
IDesignerLoaderProvider loader;
IDesignerGenerator generator;
IDesignerSourceProvider sourceProvider;
switch (fileExtension) {
case ".cs":
@ -128,7 +129,10 @@ namespace ICSharpCode.FormsDesigner @@ -128,7 +129,10 @@ namespace ICSharpCode.FormsDesigner
default:
throw new ApplicationException("Cannot create content for " + fileExtension);
}
return new IViewContent[] { new FormsDesignerViewContent(viewContent, loader, generator) };
sourceProvider = (IDesignerSourceProvider)generator;
return new IViewContent[] { new FormsDesignerViewContent(viewContent, loader, generator, sourceProvider) };
}
}
}

1
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/DesignerResourceService.cs

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Globalization;
using ICSharpCode.Core;
namespace ICSharpCode.FormsDesigner.Services
{

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

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
@ -13,8 +14,6 @@ namespace ICSharpCode.FormsDesigner.Services @@ -13,8 +14,6 @@ namespace ICSharpCode.FormsDesigner.Services
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.
@ -41,7 +40,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -41,7 +40,7 @@ namespace ICSharpCode.FormsDesigner.Services
static readonly Dictionary<IProjectContent, object> projectContentsCurrentlyLoadingAssembly = new Dictionary<IProjectContent, object>();
public string LocateType(string name, out string[] referencedAssemblies)
public AssemblyInfo LocateType(string name, out AssemblyInfo[] referencedAssemblies)
{
IProjectContent pc = CallingProject;
@ -56,30 +55,30 @@ namespace ICSharpCode.FormsDesigner.Services @@ -56,30 +55,30 @@ namespace ICSharpCode.FormsDesigner.Services
foundClass = pc.GetClass(name.Replace('+', '.'), 0);
}
if (foundClass != null) {
string path = GetPathToAssembly(pc);
AssemblyInfo assembly = GetPathToAssembly(pc);
if (string.IsNullOrEmpty(path)) {
referencedAssemblies = new string[0];
return "";
if (assembly == AssemblyInfo.Empty) {
referencedAssemblies = new AssemblyInfo[0];
return AssemblyInfo.Empty;
}
List<string> assemblies = new List<string>();
List<AssemblyInfo> assemblies = new List<AssemblyInfo>();
FindReferencedAssemblies(assemblies, pc);
if (assemblies.Contains(path))
assemblies.Remove(path);
if (assemblies.Contains(assembly))
assemblies.Remove(assembly);
referencedAssemblies = assemblies.ToArray();
return path;
return assembly;
}
}
referencedAssemblies = new string[0];
return "";
referencedAssemblies = new AssemblyInfo[0];
return AssemblyInfo.Empty;
}
void FindReferencedAssemblies(List<string> assemblies, IProjectContent pc)
void FindReferencedAssemblies(List<AssemblyInfo> assemblies, IProjectContent pc)
{
// prevent StackOverflow when project contents have cyclic dependencies
// Very popular example of cyclic dependency: System <-> System.Xml (yes, really!)
@ -87,10 +86,10 @@ namespace ICSharpCode.FormsDesigner.Services @@ -87,10 +86,10 @@ namespace ICSharpCode.FormsDesigner.Services
return;
projectContentsCurrentlyLoadingAssembly.Add(pc, null);
string path = GetPathToAssembly(assemblies, pc);
AssemblyInfo assembly = GetPathToAssembly(pc);
if (!string.IsNullOrEmpty(path) && !assemblies.Contains(path))
assemblies.Add(path);
if (!assemblies.Contains(assembly))
assemblies.Add(assembly);
try {
// load dependencies of current assembly
@ -108,14 +107,17 @@ namespace ICSharpCode.FormsDesigner.Services @@ -108,14 +107,17 @@ namespace ICSharpCode.FormsDesigner.Services
}
}
string GetPathToAssembly(IProjectContent pc)
AssemblyInfo GetPathToAssembly(IProjectContent pc)
{
bool isInGac = pc.Project == null && pc is ReflectionProjectContent;
string path = "";
if (pc.Project != null)
return ((IProject)pc.Project).OutputAssemblyFullPath;
path = ((IProject)pc.Project).OutputAssemblyFullPath;
else if (pc is ReflectionProjectContent)
return ((ReflectionProjectContent)pc).AssemblyLocation;
path = ((ReflectionProjectContent)pc).AssemblyLocation;
return null;
return new AssemblyInfo(path, isInGac);
}
}

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

@ -5,6 +5,8 @@ using System; @@ -5,6 +5,8 @@ using System;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Visitors;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.FormsDesigner.Services
{

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

@ -1,15 +1,18 @@ @@ -1,15 +1,18 @@
// 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 ICSharpCode.NRefactory;
using System;
using System.CodeDom;
using System.IO;
using System.Linq;
using System.Resources.Tools;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.FormsDesigner.Services
{
@ -171,5 +174,57 @@ namespace ICSharpCode.FormsDesigner.Services @@ -171,5 +174,57 @@ namespace ICSharpCode.FormsDesigner.Services
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));
}
IProjectResourceInfo IProjectResourceService.GetProjectResource(CodePropertyReferenceExpression propRef)
{
throw new NotImplementedException();
}
public bool FindResourceClassNames(IProjectResourceInfo resourceInfo, out string resourceClassFullyQualifiedName, out string resourcePropertyName)
{
IProject project = ProjectContent.Project as IProject;
resourceClassFullyQualifiedName = null;
resourcePropertyName = null;
if (project == null) {
LoggingService.Warn("Serializer cannot proceed because project is not an IProject");
return false;
}
string resourceFileDirectory = Path.GetDirectoryName(resourceInfo.ResourceFile);
string resourceFileName = Path.GetFileName(resourceInfo.ResourceFile);
var items = project.Items
.OfType<FileProjectItem>()
.Where(
fpi =>
FileUtility.IsEqualFileName(Path.GetDirectoryName(fpi.FileName), resourceFileDirectory) &&
FileUtility.IsEqualFileName(fpi.DependentUpon, resourceFileName) &&
fpi.ItemType == ItemType.Compile &&
fpi.VirtualName.ToUpperInvariant().Contains("DESIGNER")
);
if (items.Count() != 1) {
LoggingService.Info("Did not find exactly one possible file that contains the generated class for the resource file '" + resourceInfo.ResourceFile + "'. Ignoring this resource.");
return false;
}
string resourceCodeFile = items.Single().FileName;
// We expect a single class to be in this file.
IClass resourceClass = ParserService.GetParseInformation(resourceCodeFile).CompilationUnit.Classes.Single();
// Here we assume that VerifyResourceName is the same name transform that
// was used when generating the resource code file.
// This should be true as long as the code is generated using the
// custom tool in SharpDevelop or Visual Studio.
resourceClassFullyQualifiedName = resourceClass.FullyQualifiedName;
resourcePropertyName = StronglyTypedResourceBuilder.VerifyResourceName(resourceInfo.ResourceKey, ProjectContent.Language.CodeDomProvider ?? LanguageProperties.CSharp.CodeDomProvider);
if (resourcePropertyName == null) {
throw new InvalidOperationException("The resource name '" + resourceInfo.ResourceKey + "' could not be transformed to a name that is valid in the current programming language.");
}
return true;
}
}
}

65
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/SharpDevelopCommandProvider.cs

@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
// 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.ComponentModel.Design;
using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Core.WinForms;
using ICSharpCode.FormsDesigner.Commands;
namespace ICSharpCode.FormsDesigner.Services
{
public class SharpDevelopCommandProvider : ICommandProvider
{
FormsDesignerViewContent vc;
public SharpDevelopCommandProvider(FormsDesignerViewContent vc)
{
this.vc = vc;
}
public void InitializeGlobalCommands(IMenuCommandService service)
{
// Most commands like Delete, Cut, Copy and paste are all added to the MenuCommandService
// by the other services like the DesignerHost. Commands like ViewCode and ShowProperties
// need to be added by the IDE because only the IDE would know how to perform those actions.
// This allows people to call MenuCommandSerice.GlobalInvoke( StandardCommands.ViewCode );
// from designers and what not. .Net Control Designers like the TableLayoutPanelDesigner
// build up their own context menus instead of letting the MenuCommandService build it.
// The context menus they build up are in the format that Visual studio expects and invokes
// the ViewCode and Properties commands by using GlobalInvoke.
AbstractFormsDesignerCommand viewCodeCommand = new ViewCode();
AbstractFormsDesignerCommand propertiesCodeCommand = new ShowProperties();
service.AddCommand(new System.ComponentModel.Design.MenuCommand(viewCodeCommand.CommandCallBack, viewCodeCommand.CommandID));
service.AddCommand(new System.ComponentModel.Design.MenuCommand(propertiesCodeCommand.CommandCallBack, propertiesCodeCommand.CommandID));
}
public void ShowContextMenu(CommandID menuID, int x, int y)
{
string contextMenuPath = "/SharpDevelop/FormsDesigner/ContextMenus/";
if (menuID == MenuCommands.ComponentTrayMenu) {
contextMenuPath += "ComponentTrayMenu";
} else if (menuID == MenuCommands.ContainerMenu) {
contextMenuPath += "ContainerMenu";
} else if (menuID == MenuCommands.SelectionMenu) {
contextMenuPath += "SelectionMenu";
} else if (menuID == MenuCommands.TraySelectionMenu) {
contextMenuPath += "TraySelectionMenu";
} else {
throw new Exception();
}
Control panel = vc.UserContent;
if (panel != null) {
Point p = panel.PointToClient(new Point(x, y));
MenuService.ShowContextMenu(this, contextMenuPath, panel, p.X, p.Y);
}
}
}
}

2
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Services/UIService.cs

@ -7,6 +7,8 @@ using System.Drawing; @@ -7,6 +7,8 @@ using System.Drawing;
using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Core;
namespace ICSharpCode.FormsDesigner.Services
{
public class UIService : IUIService

46
src/AddIns/DisplayBindings/FormsDesigner/FormsDesigner.AddIn/Toolbox/CustomComponentsSideTab.cs

@ -113,53 +113,9 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -113,53 +113,9 @@ namespace ICSharpCode.FormsDesigner.Gui
// is not a design component
continue;
isDesignComponent:
this.Items.Add(new SideTabItemDesigner(c.Name, new CustomComponentToolBoxItem(c)));
this.Items.Add(new SideTabItemDesigner(c.Name, new CustomComponentToolBoxItem(c.CompilationUnit.FileName, c.FullyQualifiedName)));
}
}
}
}
public class CustomComponentToolBoxItem : ToolboxItem
{
string className;
IProjectContent assemblyLocation;
Assembly usedAssembly = null;
public CustomComponentToolBoxItem(IClass c)
{
className = c.FullyQualifiedName;
assemblyLocation = c.ProjectContent;
this.Bitmap = new ToolboxItem(typeof(Component)).Bitmap;
this.IsTransient = true;
}
void Init(IDesignerHost host)
{
LoggingService.Debug("Initializing MyToolBoxItem: " + className);
if (host == null) throw new ArgumentNullException("host");
if (assemblyLocation != null) {
TypeResolutionService typeResolutionService = host.GetService(typeof(ITypeResolutionService)) as TypeResolutionService;
if (typeResolutionService == null) {
throw new InvalidOperationException("Cannot initialize CustomComponentToolBoxItem because the designer host does not provide a SharpDevelop TypeResolutionService.");
}
Assembly asm = typeResolutionService.LoadAssembly(assemblyLocation);
if (asm != null && usedAssembly != asm) {
Initialize(asm.GetType(className));
usedAssembly = asm;
}
}
}
protected override IComponent[] CreateComponentsCore(IDesignerHost host)
{
Init(host);
return base.CreateComponentsCore(host);
}
protected override IComponent[] CreateComponentsCore(IDesignerHost host, System.Collections.IDictionary defaultValues)
{
Init(host);
return base.CreateComponentsCore(host, defaultValues);
}
}
}

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

@ -35,13 +35,14 @@ @@ -35,13 +35,14 @@
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<DebugType>None</DebugType>
<DebugSymbols>false</DebugSymbols>
<DefineConstants>FORMSDESIGNER_DLL</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<Optimize>False</Optimize>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<DefineConstants>DEBUG</DefineConstants>
<DebugType>Full</DebugType>
<DebugSymbols>true</DebugSymbols>
<DefineConstants>DEBUG, FORMSDESIGNER_DLL</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
@ -53,6 +54,9 @@ @@ -53,6 +54,9 @@
<Reference Include="System.XML" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\..\..\Main\ICSharpCode.SharpDevelop.Dom\Project\Src\EasyCodeDom.cs">
<Link>EasyCodeDom.cs</Link>
</Compile>
<EmbeddedResource Include="Resources\AddSidebarComponentsDialog.xfrm" />
<EmbeddedResource Include="Resources\ConfigureSidebarDialog.xfrm" />
<EmbeddedResource Include="Resources\RenameSidebarCategoryDialog.xfrm" />
@ -62,9 +66,11 @@ @@ -62,9 +66,11 @@
<Compile Include="Src\DesignerLoader\SharpDevelopDesignerLoader.cs" />
<Compile Include="Src\DesignerLoader\IDesignerLoader.cs" />
<Compile Include="Src\Gui\ComponentLibraryLoader.cs" />
<Compile Include="Src\Gui\CustomComponentToolBoxItem.cs" />
<Compile Include="Src\IDesignerGenerator.cs" />
<Compile Include="Src\IFormsDesigner.cs" />
<Compile Include="Src\LoggingService.cs" />
<Compile Include="Src\Services\AssemblyInfo.cs" />
<Compile Include="Src\Services\DefaultMemberRelationshipService.cs" />
<Compile Include="Src\Services\DefaultServiceContainer.cs" />
<Compile Include="Src\Services\DesignerOptionService.cs" />
@ -80,7 +86,6 @@ @@ -80,7 +86,6 @@
<Compile Include="Src\Services\ToolboxService.cs" />
<Compile Include="Src\Services\TypeResolutionService.cs" />
<Compile Include="Src\Services\XmlDesignerNameCreationService.cs" />
<Compile Include="Src\DesignerLoader\DesignerLoaderProvider.cs" />
<Compile Include="Src\DesignerLoader\FormsDesignerLoadException.cs" />
<Compile Include="Src\Services\TypeDiscoveryService.cs" />
<Compile Include="Src\UndoRedo\UndoEngine.cs" />

3
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/IDesignerLoader.cs

@ -10,9 +10,8 @@ namespace ICSharpCode.FormsDesigner @@ -10,9 +10,8 @@ namespace ICSharpCode.FormsDesigner
public interface IDesignerLoader
{
CodeCompileUnit Parse();
void Write(CodeCompileUnit unit);
CodeDomLocalizationModel GetLocalizationModel();
bool IsReloadNeeded(bool value);
}
}

11
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/SharpDevelopDesignerLoader.cs

@ -44,12 +44,16 @@ namespace ICSharpCode.FormsDesigner @@ -44,12 +44,16 @@ namespace ICSharpCode.FormsDesigner
get { return this.generator; }
}
protected SharpDevelopDesignerLoader(IDesignerGenerator generator)
public SharpDevelopDesignerLoader(IDesignerGenerator generator, IDesignerLoader loader)
{
if (generator == null) {
throw new ArgumentNullException("generator", "Generator cannot be null");
}
if (loader == null)
throw new ArgumentNullException("loader");
this.generator = generator;
this.loader = loader;
}
public override void Dispose()
@ -148,5 +152,10 @@ namespace ICSharpCode.FormsDesigner @@ -148,5 +152,10 @@ namespace ICSharpCode.FormsDesigner
{
return loader.Parse();
}
protected override bool IsReloadNeeded()
{
return loader.IsReloadNeeded(base.IsReloadNeeded());
}
}
}

56
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentToolBoxItem.cs

@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing.Design;
using ICSharpCode.FormsDesigner.Services;
// 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)
namespace ICSharpCode.FormsDesigner.Gui
{
public class CustomComponentToolBoxItem : ToolboxItem
{
string sourceFileName;
string className;
bool initialized;
public CustomComponentToolBoxItem(string sourceFileName, string className)
{
this.sourceFileName = sourceFileName;
this.className = className;
this.Bitmap = new ToolboxItem(typeof(Component)).Bitmap;
this.IsTransient = true;
}
void Init(IDesignerHost host)
{
LoggingService.Debug("Initializing MyToolBoxItem: " + className);
if (host == null) throw new ArgumentNullException("host");
if (sourceFileName != null) {
TypeResolutionService typeResolutionService = host.GetService(typeof(ITypeResolutionService)) as TypeResolutionService;
if (typeResolutionService == null) {
throw new InvalidOperationException("Cannot initialize CustomComponentToolBoxItem because the designer host does not provide a SharpDevelop TypeResolutionService.");
}
if (!initialized) {
Initialize(typeResolutionService.GetType(className));
initialized = true;
}
}
}
protected override IComponent[] CreateComponentsCore(IDesignerHost host)
{
Init(host);
return base.CreateComponentsCore(host);
}
protected override IComponent[] CreateComponentsCore(IDesignerHost host, System.Collections.IDictionary defaultValues)
{
Init(host);
return base.CreateComponentsCore(host, defaultValues);
}
}
}

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

@ -12,22 +12,6 @@ namespace ICSharpCode.FormsDesigner @@ -12,22 +12,6 @@ namespace ICSharpCode.FormsDesigner
{
public interface IDesignerGenerator
{
//CodeDomProvider CodeDomProvider { get; }
//void Attach(FormsDesignerViewContent viewContent);
//void Detach();
//FormsDesignerViewContent ViewContent { get; }
/*
/// <summary>
/// Gets the collection of OpenedFiles that contain code which belongs
/// to the designed form, not including resource files.
/// </summary>
/// <param name="designerCodeFile">Receives the file which contains the code to be modified by the forms designer.</param>
/// <returns>A collection of OpenedFiles that contain code which belongs to the designed form.</returns>
/// <remarks>The returned collection must include the <paramref name="designerCodeFile"/>.</remarks>
IEnumerable<OpenedFile> GetSourceFiles(out OpenedFile designerCodeFile);
*/
void MergeFormChanges(CodeCompileUnit unit);
bool InsertComponentEvent(IComponent component, EventDescriptor edesc, string eventMethodName, string body, out string file, out int position);
ICollection GetCompatibleMethods(EventDescriptor edesc);

55
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/AssemblyInfo.cs

@ -0,0 +1,55 @@ @@ -0,0 +1,55 @@
// 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 : IEquatable<AssemblyInfo>
{
public static readonly AssemblyInfo Empty = new AssemblyInfo("", false);
public readonly string FullNameOrPath;
public readonly bool IsInGac;
public AssemblyInfo(string fullNameOrPath, bool isInGac)
{
this.FullNameOrPath = fullNameOrPath;
this.IsInGac = isInGac;
}
#region Equals and GetHashCode implementation
public override bool Equals(object obj)
{
return (obj is AssemblyInfo) && Equals((AssemblyInfo)obj);
}
public bool Equals(AssemblyInfo other)
{
return this.FullNameOrPath == other.FullNameOrPath && this.IsInGac == other.IsInGac;
}
public override int GetHashCode()
{
int hashCode = 0;
unchecked {
if (FullNameOrPath != null)
hashCode += 1000000007 * FullNameOrPath.GetHashCode();
hashCode += 1000000009 * IsInGac.GetHashCode();
}
return hashCode;
}
public static bool operator ==(AssemblyInfo lhs, AssemblyInfo rhs)
{
return lhs.Equals(rhs);
}
public static bool operator !=(AssemblyInfo lhs, AssemblyInfo rhs)
{
return !(lhs == rhs);
}
#endregion
}
}

19
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/DesignerOptionService.cs

@ -36,25 +36,6 @@ namespace ICSharpCode.FormsDesigner.Services @@ -36,25 +36,6 @@ namespace ICSharpCode.FormsDesigner.Services
// Whether to include an underscore in the event handler name
public string EventHandlerNameFormat { get; set; }
/*
public SharpDevelopDesignerOptions()
{
int w = PropertyService.Get("FormsDesigner.DesignerOptions.GridSizeWidth", 8);
int h = PropertyService.Get("FormsDesigner.DesignerOptions.GridSizeHeight", 8);
this.gridSize = new Size(w, h);
this.showGrid = PropertyService.Get("FormsDesigner.DesignerOptions.ShowGrid", true);
this.snapToGrid = PropertyService.Get("FormsDesigner.DesignerOptions.SnapToGrid", true);
this.useSmartTags = GeneralOptionsPanel.UseSmartTags;
this.useSnapLines = PropertyService.Get("FormsDesigner.DesignerOptions.UseSnapLines", true);
this.enableInSituEditing = PropertyService.Get("FormsDesigner.DesignerOptions.EnableInSituEditing", true);
this.objectBoundSmartTagAutoShow = GeneralOptionsPanel.SmartTagAutoShow;
this.useOptimizedCodeGeneration = PropertyService.Get("FormsDesigner.DesignerOptions.UseOptimizedCodeGeneration", true);
}
*/
}
public class SharpDevelopDesignerOptionService : WindowsFormsDesignerOptionService

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

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
using System;
using System.CodeDom;
using System.ComponentModel.Design;
using System.IO;
using System.Linq;
@ -12,7 +13,8 @@ namespace ICSharpCode.FormsDesigner.Services @@ -12,7 +13,8 @@ namespace ICSharpCode.FormsDesigner.Services
{
IProjectResourceInfo GetProjectResource(CodePropertyReferenceExpression propRef);
bool DesignerSupportsProjectResources { get; set; }
string ProjectResourceKey { get; set; }
string ProjectResourceKey { get; }
bool FindResourceClassNames(IProjectResourceInfo resourceInfo, out string resourceClassFullyQualifiedName, out string resourcePropertyName);
}
public interface IMessageService
@ -29,4 +31,10 @@ namespace ICSharpCode.FormsDesigner.Services @@ -29,4 +31,10 @@ namespace ICSharpCode.FormsDesigner.Services
string ResourceKey { get; }
object OriginalValue { get; }
}
public interface ICommandProvider
{
void InitializeGlobalCommands(IMenuCommandService service);
void ShowContextMenu(CommandID menuID, int x, int y);
}
}

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

@ -2,20 +2,13 @@ @@ -2,20 +2,13 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Windows.Forms.Design;
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
{
@ -26,4 +19,9 @@ namespace ICSharpCode.FormsDesigner.Services @@ -26,4 +19,9 @@ namespace ICSharpCode.FormsDesigner.Services
{
bool IsGacAssembly(string path);
}
public interface IImageResourceEditorDialogWrapper
{
object GetValue(IProjectResourceInfo projectResource, object value, IProjectResourceService prs, ITypeDescriptorContext context, IWindowsFormsEditorService edsvc, IDictionaryService dictService);
}
}

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

@ -76,9 +76,9 @@ namespace ICSharpCode.FormsDesigner.Services @@ -76,9 +76,9 @@ namespace ICSharpCode.FormsDesigner.Services
var projectResource = dictService.GetValue(prs.ProjectResourceKey + context.PropertyDescriptor.Name) as IProjectResourceInfo;
var imageDialogWrapper = provider.GetService(typeof(IImageResourceEditorDialogWrapper)) as IImageResourceEditorDialogWrapper;
return value;
return imageDialogWrapper.GetValue(projectResource, value, prs, context, edsvc, dictService) ?? value;
}
[PermissionSet(SecurityAction.LinkDemand, Name="FullTrust")]

48
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/MenuCommandService.cs

@ -11,55 +11,19 @@ using MenuCommand = System.ComponentModel.Design.MenuCommand; @@ -11,55 +11,19 @@ using MenuCommand = System.ComponentModel.Design.MenuCommand;
namespace ICSharpCode.FormsDesigner.Services
{
class MenuCommandService : System.ComponentModel.Design.MenuCommandService
public class MenuCommandService : System.ComponentModel.Design.MenuCommandService
{
IFormsDesigner vc;
ICommandProvider commandProvider;
public MenuCommandService(IFormsDesigner vc, IServiceProvider serviceProvider) : base(serviceProvider)
public MenuCommandService(ICommandProvider commandProvider, IServiceProvider serviceProvider) : base(serviceProvider)
{
this.vc = vc;
this.InitializeGlobalCommands();
}
private void InitializeGlobalCommands()
{
//Most commands like Delete, Cut, Copy and paste are all added to the MenuCommandService
// by the other services like the DesignerHost. Commands like ViewCode and ShowProperties
// need to be added by the IDE because only the IDE would know how to perform those actions.
// This allows people to call MenuCommandSerice.GlobalInvoke( StandardCommands.ViewCode );
// from designers and what not. .Net Control Designers like the TableLayoutPanelDesigner
// build up their own context menus instead of letting the MenuCommandService build it.
// The context menus they build up are in the format that Visual studio expects and invokes
// the ViewCode and Properties commands by using GlobalInvoke.
AbstractFormsDesignerCommand viewCodeCommand = new ViewCode();
AbstractFormsDesignerCommand propertiesCodeCommand = new ShowProperties();
this.AddCommand( new MenuCommand(viewCodeCommand.CommandCallBack, viewCodeCommand.CommandID));
this.AddCommand( new MenuCommand(propertiesCodeCommand.CommandCallBack, propertiesCodeCommand.CommandID));
this.commandProvider = commandProvider;
commandProvider.InitializeGlobalCommands(this);
}
public override void ShowContextMenu(CommandID menuID, int x, int y)
{
string contextMenuPath = "/SharpDevelop/FormsDesigner/ContextMenus/";
if (menuID == MenuCommands.ComponentTrayMenu) {
contextMenuPath += "ComponentTrayMenu";
} else if (menuID == MenuCommands.ContainerMenu) {
contextMenuPath += "ContainerMenu";
} else if (menuID == MenuCommands.SelectionMenu) {
contextMenuPath += "SelectionMenu";
} else if (menuID == MenuCommands.TraySelectionMenu) {
contextMenuPath += "TraySelectionMenu";
} else {
throw new Exception();
}
Control panel = vc.UserContent;
if (panel != null) {
Point p = panel.PointToClient(new Point(x, y));
MenuService.ShowContextMenu(this, contextMenuPath, panel, p.X, p.Y);
}
commandProvider.ShowContextMenu(menuID, x, y);
}
}
}

46
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs

@ -10,6 +10,8 @@ using System.IO; @@ -10,6 +10,8 @@ using System.IO;
using System.Linq;
using System.Resources.Tools;
using ICSharpCode.EasyCodeDom;
namespace ICSharpCode.FormsDesigner.Services
{
/// <summary>
@ -47,7 +49,6 @@ namespace ICSharpCode.FormsDesigner.Services @@ -47,7 +49,6 @@ namespace ICSharpCode.FormsDesigner.Services
var dictService = component.Site.GetService(typeof(IDictionaryService)) as IDictionaryService;
if (dictService == null) return false;
var prs = manager.GetService(typeof(IProjectResourceService)) as IProjectResourceService;
if (prs == null) {
@ -64,47 +65,14 @@ namespace ICSharpCode.FormsDesigner.Services @@ -64,47 +65,14 @@ namespace ICSharpCode.FormsDesigner.Services
}
// Find the generated file with the resource accessing class.
IProject project = prs.ProjectContent.Project as IProject;
if (project == null) {
LoggingService.Warn("Serializer cannot proceed because project is not an IProject");
string resourceClassFullyQualifiedName;
string resourcePropertyName;
if (!prs.FindResourceClassNames(resourceInfo, out resourceClassFullyQualifiedName, out resourcePropertyName))
return false;
}
string resourceFileDirectory = Path.GetDirectoryName(resourceInfo.ResourceFile);
string resourceFileName = Path.GetFileName(resourceInfo.ResourceFile);
var items = project.Items
.OfType<FileProjectItem>()
.Where(
fpi =>
FileUtility.IsEqualFileName(Path.GetDirectoryName(fpi.FileName), resourceFileDirectory) &&
FileUtility.IsEqualFileName(fpi.DependentUpon, resourceFileName) &&
fpi.ItemType == ItemType.Compile &&
fpi.VirtualName.ToUpperInvariant().Contains("DESIGNER")
);
if (items.Count() != 1) {
LoggingService.Info("Did not find exactly one possible file that contains the generated class for the resource file '" + resourceInfo.ResourceFile + "'. Ignoring this resource.");
return false;
}
string resourceCodeFile = items.Single().FileName;
// We expect a single class to be in this file.
IClass resourceClass = ParserService.GetParseInformation(resourceCodeFile).CompilationUnit.Classes.Single();
// Here we assume that VerifyResourceName is the same name transform that
// was used when generating the resource code file.
// This should be true as long as the code is generated using the
// custom tool in SharpDevelop or Visual Studio.
string resourcePropertyName = StronglyTypedResourceBuilder.VerifyResourceName(resourceInfo.ResourceKey, prs.ProjectContent.Language.CodeDomProvider ?? LanguageProperties.CSharp.CodeDomProvider);
if (resourcePropertyName == null) {
throw new InvalidOperationException("The resource name '" + resourceInfo.ResourceKey + "' could not be transformed to a name that is valid in the current programming language.");
}
// Now do the actual serialization.
LoggingService.Debug("Serializing project resource: Component '" + component.ToString() + "', Property: '" + propDesc.Name + "', Resource class: '" + resourceClass.FullyQualifiedName + "', Resource property: '" + resourcePropertyName + "'");
LoggingService.Debug("Serializing project resource: Component '" + component.ToString() + "', Property: '" + propDesc.Name + "', Resource class: '" + resourceClassFullyQualifiedName + "', Resource property: '" + resourcePropertyName + "'");
var targetObjectExpr = base.SerializeToExpression(manager, value);
if (targetObjectExpr == null) {
@ -119,7 +87,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -119,7 +87,7 @@ namespace ICSharpCode.FormsDesigner.Services
var propRefSource =
Easy.Type(
new CodeTypeReference(resourceClass.FullyQualifiedName, CodeTypeReferenceOptions.GlobalReference)
new CodeTypeReference(resourceClassFullyQualifiedName, CodeTypeReferenceOptions.GlobalReference)
).Property(resourcePropertyName);
var extAttr = propDesc.Attributes[typeof(ExtenderProvidedPropertyAttribute)] as ExtenderProvidedPropertyAttribute;

6
src/AddIns/DisplayBindings/WpfDesign/WpfDesign.AddIn/WpfDesign.AddIn.csproj

@ -128,9 +128,9 @@ @@ -128,9 +128,9 @@
<Name>ICSharpCode.SharpDevelop.Widgets</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\FormsDesigner\Project\FormsDesigner.csproj">
<Project>{7D7E92DF-ACEB-4B69-92C8-8AC7A703CD57}</Project>
<Name>FormsDesigner</Name>
<ProjectReference Include="..\..\FormsDesigner\FormsDesigner.AddIn\FormsDesigner.AddIn.csproj">
<Project>{53840EAB-984D-419F-A2A2-6D13C3F3D5B4}</Project>
<Name>FormsDesigner.AddIn</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\WpfDesign.Designer\Project\WpfDesign.Designer.csproj">

7
src/AddIns/Misc/SharpRefactoring/Project/Src/CSharpMethodExtractor.cs

@ -103,7 +103,7 @@ namespace SharpRefactoring @@ -103,7 +103,7 @@ namespace SharpRefactoring
var variablesList = (from list in ltv.Variables.Values from item in list select new Variable(item))
.Where(v => !(v.StartPos > end || v.EndPos < start) &&
(HasReferencesInSelection(newMethod, v) ||
(HasReferencesInSelection(newMethod, v) ||
HasOccurrencesAfter(CSharpNameComparer, this.parentNode, end, v.Name, v.StartPos, v.EndPos)))
.Union(FromParameters(newMethod))
.Select(va => ResolveVariable(va));
@ -194,7 +194,10 @@ namespace SharpRefactoring @@ -194,7 +194,10 @@ namespace SharpRefactoring
if (variable.Type.Type == "var")
variable.Type = Dom.Refactoring.CodeGenerator.ConvertType(type, finder);
variable.IsReferenceType = type.IsReferenceType == true;
if (type == null)
variable.IsReferenceType = false;
else
variable.IsReferenceType = type.IsReferenceType == true;
return variable;
}

727
src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/EasyCodeDom.cs

@ -6,377 +6,404 @@ using System.CodeDom; @@ -6,377 +6,404 @@ using System.CodeDom;
namespace ICSharpCode.EasyCodeDom
{
public static class Easy
#if FORMSDESIGNER_DLL
internal
#else
public
#endif
static class Easy
{
public static CodeTypeReference TypeRef(Type type)
{
public static CodeTypeReference TypeRef(Type type)
{
return new CodeTypeReference(type, CodeTypeReferenceOptions.GlobalReference);
}
public static CodeTypeReference TypeRef(CodeTypeDeclaration type)
{
return new CodeTypeReference(type.Name);
}
public static CodeTypeReference TypeRef(string typeName, params string[] typeArguments)
{
CodeTypeReference tr = new CodeTypeReference(typeName);
foreach (string ta in typeArguments) {
tr.TypeArguments.Add(ta);
}
return tr;
}
/// <summary>
/// Gets the CodeExpression for any primitive value that can be expressed as literal.
/// Also works for enumeration values.
/// </summary>
public static CodeExpression Prim(object literalValue)
{
if (literalValue is Enum) {
return Type(literalValue.GetType()).Field(literalValue.ToString());
} else {
return new CodePrimitiveExpression(literalValue);
}
}
public static CodeTypeReferenceExpression Type(Type type)
{
return Type(TypeRef(type));
}
public static CodeTypeReferenceExpression Type(CodeTypeReference type)
{
return new CodeTypeReferenceExpression(type);
}
public static CodeTypeReferenceExpression Type(string type)
{
return Type(new CodeTypeReference(type));
}
public static CodeTypeOfExpression TypeOf(Type type)
{
return TypeOf(TypeRef(type));
}
public static CodeTypeOfExpression TypeOf(CodeTypeReference type)
{
return new CodeTypeOfExpression(type);
}
public static CodeObjectCreateExpression New(Type type, params CodeExpression[] arguments)
{
return New(TypeRef(type), arguments);
}
public static CodeObjectCreateExpression New(CodeTypeReference type, params CodeExpression[] arguments)
{
return new CodeObjectCreateExpression(type, arguments);
}
public static CodeVariableReferenceExpression Var(string name)
{
return new CodeVariableReferenceExpression(name);
}
public static CodeBinaryOperatorExpression Binary(CodeExpression left,
CodeBinaryOperatorType op,
CodeExpression right)
{
return new CodeBinaryOperatorExpression(left, op, right);
}
public static CodeThisReferenceExpression This {
get {
return new CodeThisReferenceExpression();
}
}
public static CodeBaseReferenceExpression Base {
get {
return new CodeBaseReferenceExpression();
}
}
public static CodePropertySetValueReferenceExpression Value {
get {
return new CodePropertySetValueReferenceExpression();
}
}
public static CodePrimitiveExpression Null {
get {
return new CodePrimitiveExpression(null);
}
}
public static void AddSummary(CodeTypeMember member, string summary)
{
member.Comments.Add(new CodeCommentStatement("<summary>", true));
member.Comments.Add(new CodeCommentStatement(summary, true));
member.Comments.Add(new CodeCommentStatement("</summary>", true));
}
internal static CodeAttributeDeclaration AddAttribute(CodeAttributeDeclarationCollection col,
CodeTypeReference type,
CodeExpression[] arguments)
{
CodeAttributeArgument[] attributeArguments = new CodeAttributeArgument[arguments.Length];
for (int i = 0; i < arguments.Length; i++) {
attributeArguments[i] = new CodeAttributeArgument(arguments[i]);
}
CodeAttributeDeclaration cad = new CodeAttributeDeclaration(type, attributeArguments);
col.Add(cad);
return cad;
return new CodeTypeReference(type, CodeTypeReferenceOptions.GlobalReference);
}
public static CodeTypeReference TypeRef(CodeTypeDeclaration type)
{
return new CodeTypeReference(type.Name);
}
public static CodeTypeReference TypeRef(string typeName, params string[] typeArguments)
{
CodeTypeReference tr = new CodeTypeReference(typeName);
foreach (string ta in typeArguments) {
tr.TypeArguments.Add(ta);
}
return tr;
}
public static class ExtensionMethods
/// <summary>
/// Gets the CodeExpression for any primitive value that can be expressed as literal.
/// Also works for enumeration values.
/// </summary>
public static CodeExpression Prim(object literalValue)
{
public static CodeMethodInvokeExpression InvokeMethod(this CodeExpression expr, string name, params CodeExpression[] arguments)
{
return new CodeMethodInvokeExpression(expr, name, arguments);
}
public static CodeCastExpression CastTo(this CodeExpression expr, Type type)
{
return expr.CastTo(Easy.TypeRef(type));
}
public static CodeCastExpression CastTo(this CodeExpression expr, CodeTypeReference type)
{
return new CodeCastExpression(type, expr);
}
public static CodeIndexerExpression Index(this CodeExpression expr, params CodeExpression[] indices)
{
return new CodeIndexerExpression(expr, indices);
}
public static CodeFieldReferenceExpression Field(this CodeExpression expr, string name)
{
return new CodeFieldReferenceExpression(expr, name);
}
public static CodePropertyReferenceExpression Property(this CodeExpression expr, string name)
{
return new CodePropertyReferenceExpression(expr, name);
}
public static CodeNamespace AddNamespace(this CodeCompileUnit ccu, string name)
{
CodeNamespace n = new CodeNamespace(name);
ccu.Namespaces.Add(n);
return n;
}
public static CodeTypeDeclaration AddType(this CodeNamespace ns, string name)
{
CodeTypeDeclaration n = new CodeTypeDeclaration(name);
ns.Types.Add(n);
return n;
}
public static CodeNamespaceImport AddImport(this CodeNamespace ns, string nameSpace)
{
CodeNamespaceImport cni = new CodeNamespaceImport(nameSpace);
ns.Imports.Add(cni);
return cni;
}
public static CodeMemberField AddField(this CodeTypeDeclaration typeDecl, Type type, string name)
{
return typeDecl.AddField(Easy.TypeRef(type), name);
}
public static CodeMemberField AddField(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
{
CodeMemberField f = new CodeMemberField(type, name);
typeDecl.Members.Add(f);
return f;
}
public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, Type type, string name)
{
return AddProperty(typeDecl, Easy.TypeRef(type), name);
}
public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
{
EasyProperty p = new EasyProperty(type, name);
typeDecl.Members.Add(p);
if (typeDecl.IsInterface == false) {
p.Attributes = MemberAttributes.Public | MemberAttributes.Final;
}
return p;
}
public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, CodeMemberField field, string name)
{
EasyProperty p = AddProperty(typeDecl, field.Type, name);
p.Getter.Return(new CodeVariableReferenceExpression(field.Name));
p.Attributes |= field.Attributes & MemberAttributes.Static; // copy static flag
return p;
}
/// <summary>
/// Adds a method with return type <c>void</c> and attributes=Public|Final to this type.
/// </summary>
public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, string name)
{
return AddMethod(typeDecl, Easy.TypeRef(typeof(void)), name);
}
/// <summary>
/// Adds a method with return type <paramref name="type"/> and attributes=Public|Final to this type.
/// </summary>
public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, Type type, string name)
{
return AddMethod(typeDecl, Easy.TypeRef(type), name);
}
/// <summary>
/// Adds a method with return type <paramref name="type"/> and attributes=Public|Final to this type.
/// </summary>
public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
{
EasyMethod p = new EasyMethod(type, name);
typeDecl.Members.Add(p);
if (typeDecl.IsInterface == false) {
p.Attributes = MemberAttributes.Public | MemberAttributes.Final;
}
return p;
}
public static CodeAttributeDeclaration AddAttribute(this CodeTypeMember typeMember, Type type, params CodeExpression[] arguments)
{
return Easy.AddAttribute(typeMember.CustomAttributes, Easy.TypeRef(type), arguments);
}
public static CodeAttributeDeclaration AddAttribute(this CodeTypeMember typeMember, CodeTypeReference type, params CodeExpression[] arguments)
{
return Easy.AddAttribute(typeMember.CustomAttributes, type, arguments);
if (literalValue is Enum) {
return Type(literalValue.GetType()).Field(literalValue.ToString());
} else {
return new CodePrimitiveExpression(literalValue);
}
}
public class EasyProperty : CodeMemberProperty
public static CodeTypeReferenceExpression Type(Type type)
{
EasyBlock getter, setter;
public EasyProperty()
{
getter = new EasyBlock(this.GetStatements);
setter = new EasyBlock(this.SetStatements);
}
public EasyProperty(CodeTypeReference type, string name) : this()
{
this.Type = type;
this.Name = name;
}
public EasyBlock Getter {
get { return getter; }
}
public EasyBlock Setter {
get { return setter; }
}
return Type(TypeRef(type));
}
public class EasyMethod : CodeMemberMethod
public static CodeTypeReferenceExpression Type(CodeTypeReference type)
{
EasyBlock body;
public EasyMethod()
{
body = new EasyBlock(this.Statements);
}
public EasyMethod(CodeTypeReference type, string name) : this()
{
this.ReturnType = type;
this.Name = name;
}
public CodeParameterDeclarationExpression AddParameter(Type type, string name)
{
return AddParameter(Easy.TypeRef(type), name);
}
public CodeParameterDeclarationExpression AddParameter(CodeTypeReference type, string name)
{
CodeParameterDeclarationExpression cpde;
cpde = new CodeParameterDeclarationExpression(type, name);
this.Parameters.Add(cpde);
return cpde;
}
public EasyBlock Body {
get { return body; }
}
return new CodeTypeReferenceExpression(type);
}
public sealed class EasyBlock
public static CodeTypeReferenceExpression Type(string type)
{
readonly CodeStatementCollection csc;
public EasyBlock(CodeStatementCollection csc)
{
this.csc = csc;
}
public CodeMethodReturnStatement Return(CodeExpression expr)
{
CodeMethodReturnStatement st = new CodeMethodReturnStatement(expr);
csc.Add(st);
return st;
}
public CodeThrowExceptionStatement Throw(CodeExpression expr)
{
CodeThrowExceptionStatement st = new CodeThrowExceptionStatement(expr);
csc.Add(st);
return st;
return Type(new CodeTypeReference(type));
}
public static CodeTypeOfExpression TypeOf(Type type)
{
return TypeOf(TypeRef(type));
}
public static CodeTypeOfExpression TypeOf(CodeTypeReference type)
{
return new CodeTypeOfExpression(type);
}
public static CodeObjectCreateExpression New(Type type, params CodeExpression[] arguments)
{
return New(TypeRef(type), arguments);
}
public static CodeObjectCreateExpression New(CodeTypeReference type, params CodeExpression[] arguments)
{
return new CodeObjectCreateExpression(type, arguments);
}
public static CodeVariableReferenceExpression Var(string name)
{
return new CodeVariableReferenceExpression(name);
}
public static CodeBinaryOperatorExpression Binary(CodeExpression left,
CodeBinaryOperatorType op,
CodeExpression right)
{
return new CodeBinaryOperatorExpression(left, op, right);
}
public static CodeThisReferenceExpression This {
get {
return new CodeThisReferenceExpression();
}
public CodeAssignStatement Assign(CodeExpression lhs, CodeExpression rhs)
{
CodeAssignStatement st = new CodeAssignStatement(lhs, rhs);
csc.Add(st);
return st;
}
public static CodeBaseReferenceExpression Base {
get {
return new CodeBaseReferenceExpression();
}
/// <summary>
/// Execute one expression as statement.
/// </summary>
public CodeExpressionStatement Add(CodeExpression expr)
{
CodeExpressionStatement st = new CodeExpressionStatement(expr);
csc.Add(st);
return st;
}
public static CodePropertySetValueReferenceExpression Value {
get {
return new CodePropertySetValueReferenceExpression();
}
/// <summary>
/// Adds the statement.
/// </summary>
public CodeStatement Add(CodeStatement st)
{
csc.Add(st);
return st;
}
public static CodePrimitiveExpression Null {
get {
return new CodePrimitiveExpression(null);
}
/// <summary>
/// Invoke a method on target as statement.
/// </summary>
public CodeExpressionStatement InvokeMethod(CodeExpression target, string name, params CodeExpression[] arguments)
{
return Add(new CodeMethodInvokeExpression(target, name, arguments));
}
public static void AddSummary(CodeTypeMember member, string summary)
{
member.Comments.Add(new CodeCommentStatement("<summary>", true));
member.Comments.Add(new CodeCommentStatement(summary, true));
member.Comments.Add(new CodeCommentStatement("</summary>", true));
}
internal static CodeAttributeDeclaration AddAttribute(CodeAttributeDeclarationCollection col,
CodeTypeReference type,
CodeExpression[] arguments)
{
CodeAttributeArgument[] attributeArguments = new CodeAttributeArgument[arguments.Length];
for (int i = 0; i < arguments.Length; i++) {
attributeArguments[i] = new CodeAttributeArgument(arguments[i]);
}
/// <summary>
/// Declares a local variable.
/// </summary>
public CodeVariableDeclarationStatement DeclareVariable(Type type, string name)
{
return DeclareVariable(Easy.TypeRef(type), name);
CodeAttributeDeclaration cad = new CodeAttributeDeclaration(type, attributeArguments);
col.Add(cad);
return cad;
}
}
#if FORMSDESIGNER_DLL
internal
#else
public
#endif
static class ExtensionMethods
{
public static CodeMethodInvokeExpression InvokeMethod(this CodeExpression expr, string name, params CodeExpression[] arguments)
{
return new CodeMethodInvokeExpression(expr, name, arguments);
}
public static CodeCastExpression CastTo(this CodeExpression expr, Type type)
{
return expr.CastTo(Easy.TypeRef(type));
}
public static CodeCastExpression CastTo(this CodeExpression expr, CodeTypeReference type)
{
return new CodeCastExpression(type, expr);
}
public static CodeIndexerExpression Index(this CodeExpression expr, params CodeExpression[] indices)
{
return new CodeIndexerExpression(expr, indices);
}
public static CodeFieldReferenceExpression Field(this CodeExpression expr, string name)
{
return new CodeFieldReferenceExpression(expr, name);
}
public static CodePropertyReferenceExpression Property(this CodeExpression expr, string name)
{
return new CodePropertyReferenceExpression(expr, name);
}
public static CodeNamespace AddNamespace(this CodeCompileUnit ccu, string name)
{
CodeNamespace n = new CodeNamespace(name);
ccu.Namespaces.Add(n);
return n;
}
public static CodeTypeDeclaration AddType(this CodeNamespace ns, string name)
{
CodeTypeDeclaration n = new CodeTypeDeclaration(name);
ns.Types.Add(n);
return n;
}
public static CodeNamespaceImport AddImport(this CodeNamespace ns, string nameSpace)
{
CodeNamespaceImport cni = new CodeNamespaceImport(nameSpace);
ns.Imports.Add(cni);
return cni;
}
public static CodeMemberField AddField(this CodeTypeDeclaration typeDecl, Type type, string name)
{
return typeDecl.AddField(Easy.TypeRef(type), name);
}
public static CodeMemberField AddField(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
{
CodeMemberField f = new CodeMemberField(type, name);
typeDecl.Members.Add(f);
return f;
}
public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, Type type, string name)
{
return AddProperty(typeDecl, Easy.TypeRef(type), name);
}
public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
{
EasyProperty p = new EasyProperty(type, name);
typeDecl.Members.Add(p);
if (typeDecl.IsInterface == false) {
p.Attributes = MemberAttributes.Public | MemberAttributes.Final;
}
/// <summary>
/// Declares a local variable.
/// </summary>
public CodeVariableDeclarationStatement DeclareVariable(CodeTypeReference type, string name)
{
CodeVariableDeclarationStatement st = new CodeVariableDeclarationStatement(type, name);
csc.Add(st);
return st;
return p;
}
public static EasyProperty AddProperty(this CodeTypeDeclaration typeDecl, CodeMemberField field, string name)
{
EasyProperty p = AddProperty(typeDecl, field.Type, name);
p.Getter.Return(new CodeVariableReferenceExpression(field.Name));
p.Attributes |= field.Attributes & MemberAttributes.Static; // copy static flag
return p;
}
/// <summary>
/// Adds a method with return type <c>void</c> and attributes=Public|Final to this type.
/// </summary>
public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, string name)
{
return AddMethod(typeDecl, Easy.TypeRef(typeof(void)), name);
}
/// <summary>
/// Adds a method with return type <paramref name="type"/> and attributes=Public|Final to this type.
/// </summary>
public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, Type type, string name)
{
return AddMethod(typeDecl, Easy.TypeRef(type), name);
}
/// <summary>
/// Adds a method with return type <paramref name="type"/> and attributes=Public|Final to this type.
/// </summary>
public static EasyMethod AddMethod(this CodeTypeDeclaration typeDecl, CodeTypeReference type, string name)
{
EasyMethod p = new EasyMethod(type, name);
typeDecl.Members.Add(p);
if (typeDecl.IsInterface == false) {
p.Attributes = MemberAttributes.Public | MemberAttributes.Final;
}
return p;
}
public static CodeAttributeDeclaration AddAttribute(this CodeTypeMember typeMember, Type type, params CodeExpression[] arguments)
{
return Easy.AddAttribute(typeMember.CustomAttributes, Easy.TypeRef(type), arguments);
}
public static CodeAttributeDeclaration AddAttribute(this CodeTypeMember typeMember, CodeTypeReference type, params CodeExpression[] arguments)
{
return Easy.AddAttribute(typeMember.CustomAttributes, type, arguments);
}
}
#if FORMSDESIGNER_DLL
internal
#else
public
#endif
class EasyProperty : CodeMemberProperty
{
EasyBlock getter, setter;
public EasyProperty()
{
getter = new EasyBlock(this.GetStatements);
setter = new EasyBlock(this.SetStatements);
}
public EasyProperty(CodeTypeReference type, string name) : this()
{
this.Type = type;
this.Name = name;
}
public EasyBlock Getter {
get { return getter; }
}
public EasyBlock Setter {
get { return setter; }
}
}
#if FORMSDESIGNER_DLL
internal
#else
public
#endif
class EasyMethod : CodeMemberMethod
{
EasyBlock body;
public EasyMethod()
{
body = new EasyBlock(this.Statements);
}
public EasyMethod(CodeTypeReference type, string name) : this()
{
this.ReturnType = type;
this.Name = name;
}
public CodeParameterDeclarationExpression AddParameter(Type type, string name)
{
return AddParameter(Easy.TypeRef(type), name);
}
public CodeParameterDeclarationExpression AddParameter(CodeTypeReference type, string name)
{
CodeParameterDeclarationExpression cpde;
cpde = new CodeParameterDeclarationExpression(type, name);
this.Parameters.Add(cpde);
return cpde;
}
public EasyBlock Body {
get { return body; }
}
}
#if FORMSDESIGNER_DLL
internal
#else
public
#endif
sealed class EasyBlock
{
readonly CodeStatementCollection csc;
public EasyBlock(CodeStatementCollection csc)
{
this.csc = csc;
}
public CodeMethodReturnStatement Return(CodeExpression expr)
{
CodeMethodReturnStatement st = new CodeMethodReturnStatement(expr);
csc.Add(st);
return st;
}
public CodeThrowExceptionStatement Throw(CodeExpression expr)
{
CodeThrowExceptionStatement st = new CodeThrowExceptionStatement(expr);
csc.Add(st);
return st;
}
public CodeAssignStatement Assign(CodeExpression lhs, CodeExpression rhs)
{
CodeAssignStatement st = new CodeAssignStatement(lhs, rhs);
csc.Add(st);
return st;
}
/// <summary>
/// Execute one expression as statement.
/// </summary>
public CodeExpressionStatement Add(CodeExpression expr)
{
CodeExpressionStatement st = new CodeExpressionStatement(expr);
csc.Add(st);
return st;
}
/// <summary>
/// Adds the statement.
/// </summary>
public CodeStatement Add(CodeStatement st)
{
csc.Add(st);
return st;
}
/// <summary>
/// Invoke a method on target as statement.
/// </summary>
public CodeExpressionStatement InvokeMethod(CodeExpression target, string name, params CodeExpression[] arguments)
{
return Add(new CodeMethodInvokeExpression(target, name, arguments));
}
/// <summary>
/// Declares a local variable.
/// </summary>
public CodeVariableDeclarationStatement DeclareVariable(Type type, string name)
{
return DeclareVariable(Easy.TypeRef(type), name);
}
/// <summary>
/// Declares a local variable.
/// </summary>
public CodeVariableDeclarationStatement DeclareVariable(CodeTypeReference type, string name)
{
CodeVariableDeclarationStatement st = new CodeVariableDeclarationStatement(type, name);
csc.Add(st);
return st;
}
}
}

Loading…
Cancel
Save