Browse Source

Add FormsDesigner project to solution.

Several important classes are not ported to SD5 yet and are commented out; so the designer is not yet usable.
pull/32/merge
Daniel Grunwald 12 years ago
parent
commit
bc7425f998
  1. 11
      SharpDevelop.Tests.sln
  2. 77
      SharpDevelop.sln
  3. 3
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj
  4. 3
      src/AddIns/DisplayBindings/FormsDesigner/Project/FormsDesigner.csproj.user
  5. 13
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Commands/FormsCommands.cs
  6. 19
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
  7. 3
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CodeDOMGenerator.cs
  8. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/IDesignerGenerator.cs
  9. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerSourceCodeStorage.cs
  10. 45
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs
  11. 3
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/FormKeyHandler.cs
  12. 5
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ComponentLibraryLoader.cs
  13. 71
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs
  14. 28
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ImageResourceEditorDialog.cs
  15. 26
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ImageResourceEditorDialog.resx
  16. 8
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml.cs
  17. 11
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/SecondaryDisplayBinding.cs
  18. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ImageResourceEditor.cs
  19. 10
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourceInfo.cs
  20. 30
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourceService.cs
  21. 11
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesComponentCodeDomSerializer.cs
  22. 18
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourcesMemberCodeDomSerializer.cs
  23. 37
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ResourceStore.cs
  24. 4
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeDiscoveryService.cs
  25. 588
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs
  26. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs
  27. 1
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/UndoRedo/UndoEngine.cs
  28. 5
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs
  29. 1
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IAmbience.cs
  30. 117
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/TypeSystemExtensions.cs
  31. 11
      src/Main/Base/Project/Src/Services/AmbienceService/DefaultAmbience.cs
  32. 2
      src/Main/Base/Project/Util/ProcessRunner.cs
  33. 14
      src/Main/Base/Project/WinForms/IWinFormsService.cs
  34. 8
      src/Main/Base/Project/Workbench/File/IFileService.cs
  35. 5
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/IMenuItemBuilder.cs
  36. 9
      src/Main/SharpDevelop/WinForms/WinFormsService.cs

11
SharpDevelop.Tests.sln

@ -169,6 +169,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.XamlDom", "src\Ad @@ -169,6 +169,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.XamlDom", "src\Ad
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "src\AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "src\AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{AF5E0DC1-1FA0-4346-A436-0C817C68F7C1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "src\AddIns\Debugger\Debugger.Core\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
@ -871,6 +873,14 @@ Global @@ -871,6 +873,14 @@ Global
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.Build.0 = Release|Any CPU
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|x86.ActiveCfg = Release|Any CPU
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|x86.Build.0 = Release|Any CPU
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}.Debug|x86.ActiveCfg = Debug|x86
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}.Debug|x86.Build.0 = Debug|x86
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}.Release|Any CPU.Build.0 = Release|Any CPU
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}.Release|x86.ActiveCfg = Release|x86
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -955,6 +965,7 @@ Global @@ -955,6 +965,7 @@ Global
{78CC29AC-CC79-4355-B1F2-97936DF198AC} = {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5}
{88DA149F-21B2-48AB-82C4-28FB6BDFD783} = {83BAB756-1010-4A2F-9B9D-7F9EBCB288F5}
{85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{9E951B9F-6AC2-4537-9D0B-0AE7C026D5A1} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{AF5E0DC1-1FA0-4346-A436-0C817C68F7C1} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {AF5E0DC1-1FA0-4346-A436-0C817C68F7C1}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {AF5E0DC1-1FA0-4346-A436-0C817C68F7C1}

77
SharpDevelop.sln

@ -1,10 +1,8 @@ @@ -1,10 +1,8 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.3
# SharpDevelop 5.0
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Main", "Main", "{256F5C28-532C-44C0-8AB8-D8EC5E492E01}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpDevelop.BuildWorker35", "src\Main\ICSharpCode.SharpDevelop.BuildWorker35\ICSharpCode.SharpDevelop.BuildWorker35.csproj", "{B5F54272-49F0-40DB-845A-8D837875D3BA}"
EndProject
@ -23,8 +21,6 @@ EndProject @@ -23,8 +21,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SharpDevelop", "src\Main\SharpDevelop\SharpDevelop.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{2A232EF1-EB95-41C6-B63A-C106E0C95D3C}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Cecil", "src\Libraries\cecil\Mono.Cecil.csproj", "{D68133BD-1E63-496E-9EDE-4FBDBF77B486}"
EndProject
@ -50,20 +46,14 @@ EndProject @@ -50,20 +46,14 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Decompiler", "src\Libraries\ICSharpCode.Decompiler\ICSharpCode.Decompiler.csproj", "{984CC812-9470-4A13-AFF9-CC44068D666C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{39327899-ED91-4F7F-988C-4FE4E17C014D}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Version Control", "Version Control", "{F208FF4F-E5D8-41D5-A7C7-B463976F156E}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitAddIn", "src\AddIns\VersionControl\GitAddIn\GitAddIn.csproj", "{83F15BA7-8478-4664-81BB-A82F146D88B3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SubversionAddIn", "src\AddIns\VersionControl\SubversionAddIn\SubversionAddIn.csproj", "{17F4D7E0-6933-4C2E-8714-FD7E98D625D5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Language Bindings", "Language Bindings", "{E0646C25-36F2-4524-969F-FA621353AB94}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSharpBinding", "src\AddIns\BackendBindings\CSharpBinding\Project\CSharpBinding.csproj", "{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A}"
EndProject
@ -80,8 +70,6 @@ EndProject @@ -80,8 +70,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting", "src\AddIns\BackendBindings\Scripting\Project\ICSharpCode.Scripting.csproj", "{7048AE18-EB93-4A84-82D0-DD60EB58ADBD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9EA2-4591-BBC6-97361DCE50A9}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchAndReplace", "src\AddIns\Misc\SearchAndReplace\Project\SearchAndReplace.csproj", "{9196DD8A-B4D4-4780-8742-C5762E547FC2}"
EndProject
@ -90,8 +78,6 @@ EndProject @@ -90,8 +78,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddinScout", "src\AddIns\Misc\AddinScout\Project\AddinScout.csproj", "{4B8F0F98-8BE1-402B-AA8B-C8D548577B38}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UsageDataCollector", "UsageDataCollector", "{59A30AA6-D600-41AB-B7A1-9543469DBE36}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UsageDataCollector", "src\AddIns\Misc\UsageDataCollector\UsageDataCollector\UsageDataCollector.csproj", "{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0}"
EndProject
@ -110,8 +96,6 @@ EndProject @@ -110,8 +96,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextTemplating", "src\AddIns\Misc\TextTemplating\Project\TextTemplating.csproj", "{B5D8C3E6-42EC-4D4B-AD05-3644B32563EF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PackageManagement", "PackageManagement", "{87D549AF-8FCD-4E84-9C33-3DB6E42FEF6D}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "src\AddIns\Misc\PackageManagement\Project\PackageManagement.csproj", "{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}"
EndProject
@ -122,8 +106,6 @@ EndProject @@ -122,8 +106,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Cmdlets", "src\AddIns\Misc\PackageManagement\Cmdlets\Project\PackageManagement.Cmdlets.csproj", "{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Display Bindings", "Display Bindings", "{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AvalonEdit.AddIn", "src\AddIns\DisplayBindings\AvalonEdit.AddIn\AvalonEdit.AddIn.csproj", "{0162E499-42D0-409B-AA25-EED21F75336B}"
EndProject
@ -138,8 +120,6 @@ EndProject @@ -138,8 +120,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SettingsEditor", "src\AddIns\DisplayBindings\SettingsEditor\Project\SettingsEditor.csproj", "{85226AFB-CE71-4851-9A75-7EEC663A8E8A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Data", "Data", "{5FB020B2-B64B-4016-999A-CB8FD9274D72}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.Addin", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.Addin\ICSharpCode.Data.Addin.csproj", "{A9F12710-24E4-46D4-832C-6ECB395B9EAD}"
EndProject
@ -154,8 +134,6 @@ EndProject @@ -154,8 +134,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Data.SQLServer", "src\AddIns\DisplayBindings\Data\ICSharpCode.Data.SQLServer\ICSharpCode.Data.SQLServer.csproj", "{AFE34868-AFA1-4E1C-9450-47AB4BE329D5}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WpfDesign", "WpfDesign", "{D54BEB89-8CBE-475C-8BB9-836D2FD71260}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign\Project\WpfDesign.csproj", "{66A378A1-E9F4-4AD5-8946-D0EC06C2902F}"
EndProject
@ -165,9 +143,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.XamlDom", "src\Ad @@ -165,9 +143,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.XamlDom", "src\Ad
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.Designer", "src\AddIns\DisplayBindings\WpfDesign\WpfDesign.Designer\Project\WpfDesign.Designer.csproj", "{78CC29AC-CC79-4355-B1F2-97936DF198AC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "src\AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{0CD86A0B-73BB-4E7E-B476-AB84389164B1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{7019F43E-DFD7-4D1C-8C96-E75D55646DE7}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "src\AddIns\Analysis\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}"
EndProject
@ -180,8 +158,6 @@ EndProject @@ -180,8 +158,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MachineSpecifications", "src\AddIns\Analysis\MachineSpecifications\MachineSpecifications\MachineSpecifications.csproj", "{D1DA3B8F-7313-4BDA-8880-461C5F007751}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Debugger", "Debugger", "{49CE38B8-0460-46BF-9DFF-5B33A0F9EB5E}"
ProjectSection(SolutionItems) = postProject
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Debugger.Core", "src\AddIns\Debugger\Debugger.Core\Debugger.Core.csproj", "{1D18D788-F7EE-4585-A23B-34DC8EC63CB8}"
EndProject
@ -517,6 +493,14 @@ Global @@ -517,6 +493,14 @@ Global
{752BD058-5517-48A1-BB27-5ED186FA052B}.Release|Any CPU.Build.0 = Release|Any CPU
{752BD058-5517-48A1-BB27-5ED186FA052B}.Release|x86.ActiveCfg = Release|Any CPU
{752BD058-5517-48A1-BB27-5ED186FA052B}.Release|x86.Build.0 = Release|Any CPU
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.ActiveCfg = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.Build.0 = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|x86.ActiveCfg = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|x86.Build.0 = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.ActiveCfg = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.Build.0 = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|x86.ActiveCfg = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|x86.Build.0 = Release|x86
{0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0162E499-42D0-409B-AA25-EED21F75336B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0162E499-42D0-409B-AA25-EED21F75336B}.Debug|x86.ActiveCfg = Debug|Any CPU
@ -709,14 +693,14 @@ Global @@ -709,14 +693,14 @@ Global
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.Build.0 = Release|Any CPU
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|x86.ActiveCfg = Release|Any CPU
{3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|x86.Build.0 = Release|Any CPU
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.Build.0 = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|Any CPU.ActiveCfg = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|x86.Build.0 = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Debug|x86.ActiveCfg = Debug|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.Build.0 = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|Any CPU.ActiveCfg = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|x86.Build.0 = Release|x86
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D}.Release|x86.ActiveCfg = Release|x86
{0CD86A0B-73BB-4E7E-B476-AB84389164B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0CD86A0B-73BB-4E7E-B476-AB84389164B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0CD86A0B-73BB-4E7E-B476-AB84389164B1}.Debug|x86.ActiveCfg = Debug|x86
{0CD86A0B-73BB-4E7E-B476-AB84389164B1}.Debug|x86.Build.0 = Debug|x86
{0CD86A0B-73BB-4E7E-B476-AB84389164B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0CD86A0B-73BB-4E7E-B476-AB84389164B1}.Release|Any CPU.Build.0 = Release|Any CPU
{0CD86A0B-73BB-4E7E-B476-AB84389164B1}.Release|x86.ActiveCfg = Release|x86
{0CD86A0B-73BB-4E7E-B476-AB84389164B1}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -732,22 +716,18 @@ Global @@ -732,22 +716,18 @@ Global
{1152B71B-3C05-4598-B20D-823B5D40559E} = {256F5C28-532C-44C0-8AB8-D8EC5E492E01}
{D68133BD-1E63-496E-9EDE-4FBDBF77B486} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
{53DCA265-3C3C-42F9-B647-F72BA678122B} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
{2FF700C2-A38A-48BD-A637-8CAFD4FE6237} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{4139CCF6-FB49-4A9D-B2CF-331E9EA3198D} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{DDE2A481-8271-4EAC-A330-8FA6A38D13D1} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{984CC812-9470-4A13-AFF9-CC44068D666C} = {2A232EF1-EB95-41C6-B63A-C106E0C95D3C}
{3B2A5653-EC97-4001-BB9B-D90F1AF2C371} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
{53DCA265-3C3C-42F9-B647-F72BA678122B} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
{DC393B66-92ED-4CAD-AB25-CFEF23F3D7C6} = {E5A0F4D8-37FD-4A30-BEB0-4409DC4E0865}
{F208FF4F-E5D8-41D5-A7C7-B463976F156E} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{7019F43E-DFD7-4D1C-8C96-E75D55646DE7} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{49CE38B8-0460-46BF-9DFF-5B33A0F9EB5E} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{83F15BA7-8478-4664-81BB-A82F146D88B3} = {F208FF4F-E5D8-41D5-A7C7-B463976F156E}
{17F4D7E0-6933-4C2E-8714-FD7E98D625D5} = {F208FF4F-E5D8-41D5-A7C7-B463976F156E}
{E0646C25-36F2-4524-969F-FA621353AB94} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{1F1AC7CD-D154-45BB-8EAF-804CA8055F5A} = {E0646C25-36F2-4524-969F-FA621353AB94}
{E954F3CB-A446-492F-A664-2B376EBC86E8} = {E0646C25-36F2-4524-969F-FA621353AB94}
{70966F84-74C9-4067-A379-0C674A929233} = {E0646C25-36F2-4524-969F-FA621353AB94}
@ -755,10 +735,13 @@ Global @@ -755,10 +735,13 @@ Global
{D781721F-C2A7-4E95-B76F-247170AC3B13} = {E0646C25-36F2-4524-969F-FA621353AB94}
{E1B288A2-08EE-4318-8BBB-8AB72C69E33E} = {E0646C25-36F2-4524-969F-FA621353AB94}
{7048AE18-EB93-4A84-82D0-DD60EB58ADBD} = {E0646C25-36F2-4524-969F-FA621353AB94}
{F3662720-9EA2-4591-BBC6-97361DCE50A9} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{9196DD8A-B4D4-4780-8742-C5762E547FC2} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{7D5C266F-D6FF-4D14-B315-0C0FC6C4EF51} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{4B8F0F98-8BE1-402B-AA8B-C8D548577B38} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{59A30AA6-D600-41AB-B7A1-9543469DBE36} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0} = {59A30AA6-D600-41AB-B7A1-9543469DBE36}
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6} = {59A30AA6-D600-41AB-B7A1-9543469DBE36}
{D022A6CE-7438-41E8-AC64-F2DE18EC54C6} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{80F76D10-0B44-4D55-B4BD-DAEB5464090C} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{F93E52FD-DA66-4CE5-A0CB-BCD902811122} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
@ -766,12 +749,11 @@ Global @@ -766,12 +749,11 @@ Global
{E2FD63DA-8478-4066-934C-DA82A852C83A} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{B5D8C3E6-42EC-4D4B-AD05-3644B32563EF} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{87D549AF-8FCD-4E84-9C33-3DB6E42FEF6D} = {F3662720-9EA2-4591-BBC6-97361DCE50A9}
{6B1CFE35-DA17-4DEB-9C6E-227E5E251DA0} = {59A30AA6-D600-41AB-B7A1-9543469DBE36}
{0008FCE9-9EB4-4E2E-979B-553278E5BBA6} = {59A30AA6-D600-41AB-B7A1-9543469DBE36}
{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1} = {87D549AF-8FCD-4E84-9C33-3DB6E42FEF6D}
{A406803B-C584-43A3-BCEE-A0BB3132CB5F} = {87D549AF-8FCD-4E84-9C33-3DB6E42FEF6D}
{752BD058-5517-48A1-BB27-5ED186FA052B} = {87D549AF-8FCD-4E84-9C33-3DB6E42FEF6D}
{E0A5E80A-003B-4335-A9DC-A76E2E46D38D} = {87D549AF-8FCD-4E84-9C33-3DB6E42FEF6D}
{11BF9245-88A3-4A0A-9A8A-EC9D98036B0F} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{0162E499-42D0-409B-AA25-EED21F75336B} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{E618A9CD-A39F-4925-A538-E8A3FEF24E54} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{DCA2703D-250A-463E-A68A-07ED105AE6BD} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
@ -779,22 +761,25 @@ Global @@ -779,22 +761,25 @@ Global
{8AA421C8-D7AF-4957-9F43-5135328ACB24} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{85226AFB-CE71-4851-9A75-7EEC663A8E8A} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{5FB020B2-B64B-4016-999A-CB8FD9274D72} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{D54BEB89-8CBE-475C-8BB9-836D2FD71260} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{A9F12710-24E4-46D4-832C-6ECB395B9EAD} = {5FB020B2-B64B-4016-999A-CB8FD9274D72}
{B7823AE9-4B43-4859-8796-2EBDC116FBB8} = {5FB020B2-B64B-4016-999A-CB8FD9274D72}
{BAD94D6E-4159-4CB6-B991-486F412D9BB6} = {5FB020B2-B64B-4016-999A-CB8FD9274D72}
{5C70D6AB-0A33-43F9-B8B5-54558C35BBB1} = {5FB020B2-B64B-4016-999A-CB8FD9274D72}
{EEF5E054-4192-4A57-8FBF-E860D808A51D} = {5FB020B2-B64B-4016-999A-CB8FD9274D72}
{AFE34868-AFA1-4E1C-9450-47AB4BE329D5} = {5FB020B2-B64B-4016-999A-CB8FD9274D72}
{D54BEB89-8CBE-475C-8BB9-836D2FD71260} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{66A378A1-E9F4-4AD5-8946-D0EC06C2902F} = {D54BEB89-8CBE-475C-8BB9-836D2FD71260}
{9A9D6FD4-6A2E-455D-ACC3-DDA775FE9865} = {D54BEB89-8CBE-475C-8BB9-836D2FD71260}
{88DA149F-21B2-48AB-82C4-28FB6BDFD783} = {D54BEB89-8CBE-475C-8BB9-836D2FD71260}
{78CC29AC-CC79-4355-B1F2-97936DF198AC} = {D54BEB89-8CBE-475C-8BB9-836D2FD71260}
{0CD86A0B-73BB-4E7E-B476-AB84389164B1} = {11BF9245-88A3-4A0A-9A8A-EC9D98036B0F}
{7019F43E-DFD7-4D1C-8C96-E75D55646DE7} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{1F261725-6318-4434-A1B1-6C70CE4CD324} = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
{3EAA45A9-735C-4AC7-A799-947B93EA449D} = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
{44FA68C9-DAD1-4C3C-90BB-3435F0D1D128} = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
{08CE9972-283B-44F4-82FA-966F7DFA6B7A} = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
{D1DA3B8F-7313-4BDA-8880-461C5F007751} = {7019F43E-DFD7-4D1C-8C96-E75D55646DE7}
{49CE38B8-0460-46BF-9DFF-5B33A0F9EB5E} = {39327899-ED91-4F7F-988C-4FE4E17C014D}
{1D18D788-F7EE-4585-A23B-34DC8EC63CB8} = {49CE38B8-0460-46BF-9DFF-5B33A0F9EB5E}
{EC06F96A-AEEC-49D6-B03D-AB87C6EB674C} = {49CE38B8-0460-46BF-9DFF-5B33A0F9EB5E}
EndGlobalSection

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

@ -22,7 +22,7 @@ @@ -22,7 +22,7 @@
<OutputPath>..\..\..\..\..\AddIns\DisplayBindings\FormsDesigner\</OutputPath>
<BaseAddress>108003328</BaseAddress>
<FileAlignment>4096</FileAlignment>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>..\..\..\..\Main\ICSharpCode.SharpDevelop.snk</AssemblyOriginatorKeyFile>
<DelaySign>False</DelaySign>
@ -128,7 +128,6 @@ @@ -128,7 +128,6 @@
<Compile Include="Src\Services\ResourceStore.cs" />
<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\ToolboxProvider.cs" />

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

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<LastOpenVersion>8.0.50215</LastOpenVersion>
<ProjectView>ShowAllFiles</ProjectView>

13
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Commands/FormsCommands.cs

@ -11,6 +11,7 @@ using ICSharpCode.Core; @@ -11,6 +11,7 @@ using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.FormsDesigner.Commands
{
@ -30,11 +31,7 @@ namespace ICSharpCode.FormsDesigner.Commands @@ -30,11 +31,7 @@ namespace ICSharpCode.FormsDesigner.Commands
FormsDesignerViewContent FormDesigner {
get {
IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;
if (window == null) {
return null;
}
return window.ActiveViewContent as FormsDesignerViewContent;
return SD.Workbench.ActiveViewContent as FormsDesignerViewContent;
}
}
public override void Run()
@ -106,9 +103,9 @@ namespace ICSharpCode.FormsDesigner.Commands @@ -106,9 +103,9 @@ namespace ICSharpCode.FormsDesigner.Commands
}
}
public class DesignerVerbSubmenuBuilder : ISubmenuBuilder
public class DesignerVerbSubmenuBuilder : IMenuItemBuilder
{
public ToolStripItem[] BuildSubmenu(Codon codon, object owner)
public IEnumerable<object> BuildItems(Codon codon, object owner)
{
IMenuCommandService menuCommandService = (IMenuCommandService)owner;
@ -123,7 +120,7 @@ namespace ICSharpCode.FormsDesigner.Commands @@ -123,7 +120,7 @@ namespace ICSharpCode.FormsDesigner.Commands
items.Add(new MenuSeparator());
}
return items.ToArray();
return items;
}
class ContextMenuCommand : ICSharpCode.Core.WinForms.MenuCommand

19
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs

@ -19,9 +19,11 @@ using ICSharpCode.SharpDevelop.Editor; @@ -19,9 +19,11 @@ using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.FormsDesigner
{
/*
public abstract class AbstractDesignerGenerator : IDesignerGenerator
{
/// <summary>The currently open part of the class being designed.</summary>
@ -81,11 +83,11 @@ namespace ICSharpCode.FormsDesigner @@ -81,11 +83,11 @@ namespace ICSharpCode.FormsDesigner
var initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(td);
if (initializeComponents != null) {
this.initializeComponents = (IUnresolvedMethod)initializeComponents.UnresolvedMember;
string designerFileName = this.initializeComponents.ParsedFile.FileName;
string designerFileName = this.initializeComponents.UnresolvedFile.FileName;
if (designerFileName != null) {
designerCodeFile = SD.FileService.GetOrCreateOpenedFile(designerFileName);
return td.Parts
.Select(p => SD.FileService.GetOrCreateOpenedFile(p.ParsedFile.FileName))
.Select(p => SD.FileService.GetOrCreateOpenedFile(p.UnresolvedFile.FileName))
.Distinct();
}
}
@ -215,8 +217,6 @@ namespace ICSharpCode.FormsDesigner @@ -215,8 +217,6 @@ namespace ICSharpCode.FormsDesigner
return;
// verify if we should rename the class
#warning Reimplement component renaming
/*
if (viewContent.Host.Container.Components[0] == component) {
ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameClass(this.formClass, newName);
} else {
@ -226,7 +226,7 @@ namespace ICSharpCode.FormsDesigner @@ -226,7 +226,7 @@ namespace ICSharpCode.FormsDesigner
ICSharpCode.SharpDevelop.Refactoring.FindReferencesAndRenameHelper.RenameMember(field, newName);
}
}
Reparse();*/
Reparse();
}
}
@ -444,7 +444,7 @@ namespace ICSharpCode.FormsDesigner @@ -444,7 +444,7 @@ namespace ICSharpCode.FormsDesigner
// Update currentClassPart from PrimaryFile
this.currentClassPart = null;
if (this.ViewContent.PrimaryFile != null && parsings.TryGetValue(this.ViewContent.PrimaryFile, out info)) {
foreach (var utd in info.ParsedFile.TopLevelTypeDefinitions) {
foreach (var utd in info.UnresolvedFile.TopLevelTypeDefinitions) {
var td = utd.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)).GetDefinition();
if (FormsDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(td)) {
if (FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(td) != null) {
@ -471,7 +471,7 @@ namespace ICSharpCode.FormsDesigner @@ -471,7 +471,7 @@ namespace ICSharpCode.FormsDesigner
return null;
}
var cu = info.ParsedFile;
var cu = info.UnresolvedFile;
foreach (var utd in cu.TopLevelTypeDefinitions) {
var td = utd.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)).GetDefinition();
if (FormsDesignerSecondaryDisplayBinding.BaseClassIsFormOrControl(td)) {
@ -574,7 +574,6 @@ namespace ICSharpCode.FormsDesigner @@ -574,7 +574,6 @@ namespace ICSharpCode.FormsDesigner
return strA == strB;
}
/*
/// <summary>
/// Gets a method implementing the signature specified by the event descriptor
/// </summary>
@ -602,7 +601,7 @@ namespace ICSharpCode.FormsDesigner @@ -602,7 +601,7 @@ namespace ICSharpCode.FormsDesigner
ConvertEventInvokeMethodToDom(context, eventType, methodName),
new ClassFinder(context, context.BodyRegion.BeginLine + 1, 1)
) as ICSharpCode.NRefactory.Ast.MethodDeclaration;
}*/
}
protected virtual int GetEventHandlerInsertionLine(IUnresolvedTypeDefinition c)
{
@ -646,5 +645,5 @@ namespace ICSharpCode.FormsDesigner @@ -646,5 +645,5 @@ namespace ICSharpCode.FormsDesigner
}
return null;
}
}
}*/
}

3
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/CodeDOMGenerator.cs

@ -11,6 +11,7 @@ using ICSharpCode.SharpDevelop; @@ -11,6 +11,7 @@ using ICSharpCode.SharpDevelop;
namespace ICSharpCode.FormsDesigner
{
/*
/// <summary>
/// This class is able to generate a CodeDOM definition out of a XML file.
/// </summary>
@ -76,5 +77,5 @@ namespace ICSharpCode.FormsDesigner @@ -76,5 +77,5 @@ namespace ICSharpCode.FormsDesigner
}
}
}*/
}

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

@ -10,6 +10,7 @@ using System.ComponentModel; @@ -10,6 +10,7 @@ using System.ComponentModel;
using System.Reflection;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.FormsDesigner
{

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

@ -10,6 +10,7 @@ using ICSharpCode.NRefactory.Editor; @@ -10,6 +10,7 @@ using ICSharpCode.NRefactory.Editor;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Refactoring;
using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.FormsDesigner
{

45
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerViewContent.cs

@ -14,6 +14,10 @@ using System.Reflection; @@ -14,6 +14,10 @@ using System.Reflection;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Designer;
using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.SharpDevelop.WinForms;
using ICSharpCode.SharpDevelop.Workbench;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.FormsDesigner.UndoRedo;
using ICSharpCode.NRefactory.Editor;
@ -344,11 +348,7 @@ namespace ICSharpCode.FormsDesigner @@ -344,11 +348,7 @@ namespace ICSharpCode.FormsDesigner
IProject GetProjectForFile()
{
Solution solution = ProjectService.OpenSolution;
if (solution != null) {
return solution.FindProjectContainingFile(this.DesignerCodeFile.FileName);
}
return null;
return SD.ProjectService.FindProjectContainingFile(this.DesignerCodeFile.FileName);
}
bool hasUnmergedChanges;
@ -368,7 +368,7 @@ namespace ICSharpCode.FormsDesigner @@ -368,7 +368,7 @@ namespace ICSharpCode.FormsDesigner
if (shouldUpdateSelectableObjects) {
// update the property pad after the transaction is *really* finished
// (including updating the selection)
WorkbenchSingleton.SafeThreadAsyncCall(UpdatePropertyPad);
SD.MainThread.InvokeAsyncAndForget(UpdatePropertyPad);
shouldUpdateSelectableObjects = false;
}
}
@ -532,28 +532,22 @@ namespace ICSharpCode.FormsDesigner @@ -532,28 +532,22 @@ namespace ICSharpCode.FormsDesigner
internal new Control UserContent {
get {
SDWindowsFormsHost host = base.UserContent as SDWindowsFormsHost;
CustomWindowsFormsHost host = base.UserContent as CustomWindowsFormsHost;
return host != null ? host.Child : null;
}
set {
SDWindowsFormsHost host = base.UserContent as SDWindowsFormsHost;
CustomWindowsFormsHost host = base.UserContent as CustomWindowsFormsHost;
if (value == null) {
base.UserContent = null;
if (host != null)
host.Dispose();
return;
}
if (host != null) {
if (host.IsDisposed) {
host = null;
} else if (host.Child == value) {
return;
}
if (host != null && host.Child == value) {
return;
}
if (host == null) {
host = new SDWindowsFormsHost(true);
host.ServiceObject = this;
host.DisposeChild = false;
host = SD.WinForms.CreateWindowsFormsHost(this, true);
}
host.Child = value;
base.UserContent = host;
@ -657,9 +651,9 @@ namespace ICSharpCode.FormsDesigner @@ -657,9 +651,9 @@ namespace ICSharpCode.FormsDesigner
public void ShowSourceCode(int lineNumber)
{
ShowSourceCode();
ITextEditorProvider tecp = this.primaryViewContent as ITextEditorProvider;
if (tecp != null) {
tecp.TextEditor.JumpTo(lineNumber, 1);
ITextEditor editor = this.primaryViewContent.GetService<ITextEditor>();
if (editor != null) {
editor.JumpTo(lineNumber, 1);
}
}
@ -730,10 +724,7 @@ namespace ICSharpCode.FormsDesigner @@ -730,10 +724,7 @@ namespace ICSharpCode.FormsDesigner
this.UnloadDesigner();
// null check is required to support running in unit test mode
if (WorkbenchSingleton.Workbench != null) {
this.IsActiveViewContentChanged -= this.IsActiveViewContentChangedHandler;
}
this.IsActiveViewContentChanged -= this.IsActiveViewContentChangedHandler;
if (this.generator != null) {
this.generator.Detach();
@ -942,11 +933,7 @@ namespace ICSharpCode.FormsDesigner @@ -942,11 +933,7 @@ namespace ICSharpCode.FormsDesigner
void FileServiceFileRemoving(object sender, FileCancelEventArgs e)
{
if (!e.Cancel) {
if (WorkbenchSingleton.InvokeRequired) {
WorkbenchSingleton.SafeThreadAsyncCall(this.CheckForDesignerCodeFileDeletion, e);
} else {
this.CheckForDesignerCodeFileDeletion(e);
}
this.CheckForDesignerCodeFileDeletion(e);
}
}

3
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/FormKeyHandler.cs

@ -11,6 +11,7 @@ using System.Windows.Forms; @@ -11,6 +11,7 @@ using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.FormsDesigner
@ -67,7 +68,7 @@ namespace ICSharpCode.FormsDesigner @@ -67,7 +68,7 @@ namespace ICSharpCode.FormsDesigner
return false;
}
FormsDesignerViewContent formDesigner = WorkbenchSingleton.Workbench.ActiveContent as FormsDesignerViewContent;
FormsDesignerViewContent formDesigner = SD.Workbench.ActiveContent as FormsDesignerViewContent;
if (formDesigner == null || formDesigner.Host == null) {
return false;

5
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ComponentLibraryLoader.cs

@ -7,6 +7,7 @@ using System.Drawing; @@ -7,6 +7,7 @@ using System.Drawing;
using System.IO;
using System.Reflection;
using System.Xml;
using ICSharpCode.SharpDevelop.Designer;
namespace ICSharpCode.FormsDesigner.Gui
{
@ -108,8 +109,8 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -108,8 +109,8 @@ namespace ICSharpCode.FormsDesigner.Gui
} else {
assembly = Assembly.Load(AssemblyName);
}
if (!ICSharpCode.FormsDesigner.Services.TypeResolutionService.DesignerAssemblies.Contains(assembly))
ICSharpCode.FormsDesigner.Services.TypeResolutionService.DesignerAssemblies.Add(assembly);
if (!TypeResolutionService.DesignerAssemblies.Contains(assembly))
TypeResolutionService.DesignerAssemblies.Add(assembly);
return assembly;
}

71
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/CustomComponentsSideTab.cs

@ -9,6 +9,7 @@ using System.Drawing.Design; @@ -9,6 +9,7 @@ using System.Drawing.Design;
using System.Linq;
using System.Reflection;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Designer;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
@ -58,61 +59,45 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -58,61 +59,45 @@ namespace ICSharpCode.FormsDesigner.Gui
}
}
/*
/// <summary>
/// Gets the list of project contents of all open projects plus the referenced project contents.
/// </summary>
static IEnumerable<IProjectContent> AllProjectContentsWithReferences {
static IEnumerable<IAssembly> AllCustomAssemblies {
get {
return Enumerable.Union(ParserService.AllProjectContents, AssemblyParserService.DefaultProjectContentRegistry.GetLoadedProjectContents());
return SD.ProjectService.AllProjects
.Select(SD.ParserService.GetCompilation)
.SelectMany(c => c.Assemblies)
.DistinctBy(asm => asm.AssemblyName) // if an assembly is referenced in multiple projects, only load scan it once
.Where(asm => !asm.IsGacAssembly()); // exclude GAC assemblies (non-custom assemblies)
}
}
*/
void ScanProjectAssemblies()
{
// custom user controls don't need custom images
loadImages = false;
foreach (IProjectContent pc in AllProjectContentsWithReferences) {
if (pc.Project == null) {
ReflectionProjectContent rpc = pc as ReflectionProjectContent;
if (rpc == null)
foreach (IAssembly asm in AllCustomAssemblies) {
ITypeDefinition componentType = asm.Compilation.FindType(typeof(IComponent)).GetDefinition();
ITypeDefinition toolBoxItemAttributeType = asm.Compilation.FindType(typeof(ToolboxItemAttribute)).GetDefinition();
if (componentType == null && toolBoxItemAttributeType == null)
continue; // assembly cannot contain any components
foreach (var c in asm.GetAllTypeDefinitions()) {
if (c.Kind != TypeKind.Class || c.TypeParameterCount != 0)
continue;
if (rpc.IsGacAssembly)
continue;
}
foreach (IClass c in pc.Classes) {
var ctors = c.Methods.Where(method => method.IsConstructor);
if (ctors.Any() && !ctors.Any(
(IMethod method) => method.IsPublic && method.Parameters.Count == 0
)) {
if (!c.GetConstructors(ctor => ctor.IsPublic && ctor.Parameters.Count == 0).Any()) {
// do not include classes that don't have a public parameterless constructor
continue;
}
foreach (IClass subClass in c.ClassInheritanceTree) {
if (subClass.FullyQualifiedName == "System.Windows.Forms.Form") {
break; // is not a design component
}
if (subClass.FullyQualifiedName == "System.ComponentModel.IComponent") {
goto isDesignComponent;
}
foreach (IAttribute attr in subClass.Attributes) {
if (attr.AttributeType.FullyQualifiedName == "System.ComponentModel.DesignTimeVisibleAttribute")
{
if (attr.PositionalArguments.Count == 1 && attr.PositionalArguments[0] is bool) {
if ((bool)attr.PositionalArguments[0]) {
goto isDesignComponent;
}
} else {
goto isDesignComponent;
}
}
}
bool? isToolboxItem = null;
IAttribute attr = c.GetAttribute(toolBoxItemAttributeType);
if (attr != null) {
if (attr.PositionalArguments.Count == 1)
isToolboxItem = attr.PositionalArguments[0].ConstantValue as bool?;
else
isToolboxItem = true;
}
// is not a design component
continue;
isDesignComponent:
this.Items.Add(new SideTabItemDesigner(c.Name, new CustomComponentToolBoxItem(c)));
if (isToolboxItem ?? c.IsDerivedFrom(componentType))
this.Items.Add(new SideTabItemDesigner(c.Name, new CustomComponentToolBoxItem(c)));
}
}
}
@ -121,13 +106,13 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -121,13 +106,13 @@ namespace ICSharpCode.FormsDesigner.Gui
public class CustomComponentToolBoxItem : ToolboxItem
{
string className;
//IProjectContent assemblyLocation;
IProject assemblyLocation;
Assembly usedAssembly = null;
public CustomComponentToolBoxItem(ITypeDefinition c)
{
className = c.FullName;
assemblyLocation = c.ProjectContent;
className = c.ReflectionName;
assemblyLocation = c.ParentAssembly.GetProject();
this.Bitmap = new ToolboxItem(typeof(Component)).Bitmap;
this.IsTransient = true;
}
@ -137,7 +122,7 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -137,7 +122,7 @@ namespace ICSharpCode.FormsDesigner.Gui
LoggingService.Debug("Initializing MyToolBoxItem: " + className);
if (host == null) throw new ArgumentNullException("host");
if (assemblyLocation != null) {
TypeResolutionService typeResolutionService = host.GetService(typeof(ITypeResolutionService)) as TypeResolutionService;
var typeResolutionService = host.GetService(typeof(ITypeResolutionService)) as IDesignerTypeResolutionService;
if (typeResolutionService == null) {
throw new InvalidOperationException("Cannot initialize CustomComponentToolBoxItem because the designer host does not provide a SharpDevelop TypeResolutionService.");
}

28
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ImageResourceEditorDialog.cs

@ -14,6 +14,8 @@ using System.Windows.Forms; @@ -14,6 +14,8 @@ using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Workbench;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
@ -215,7 +217,8 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -215,7 +217,8 @@ namespace ICSharpCode.FormsDesigner.Gui
ProjectResourceInfo selectedProjectResource = e.Argument as ProjectResourceInfo;
IProjectContent projectContent = ParserService.GetProjectContent(this.project);
ICompilation compilation = SD.ParserService.GetCompilation(this.project);
var codeDomProvider = project.CreateCodeDomProvider();
TreeNode root = new TreeNode(this.project.Name, 0, 0);
TreeNode preSelection = null;
@ -235,7 +238,13 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -235,7 +238,13 @@ namespace ICSharpCode.FormsDesigner.Gui
if (string.IsNullOrEmpty(namespaceName)) {
namespaceName = CustomToolsService.GetDefaultNamespace(item.Project, item.FileName);
}
IClass existingClass = projectContent.GetClass(namespaceName + "." + StronglyTypedResourceBuilder.VerifyResourceName(Path.GetFileNameWithoutExtension(item.FileName), projectContent.Language.CodeDomProvider), 0);
string className = item.FileName.GetFileNameWithoutExtension();
if (codeDomProvider != null) {
className = StronglyTypedResourceBuilder.VerifyResourceName(className, codeDomProvider);
if (className == null)
continue;
}
ITypeDefinition existingClass = compilation.FindType(new TopLevelTypeName(namespaceName, className)).GetDefinition();
if (existingClass != null) {
if (!ProjectResourceService.IsGeneratedResourceClass(existingClass)) {
continue;
@ -367,16 +376,15 @@ namespace ICSharpCode.FormsDesigner.Gui @@ -367,16 +376,15 @@ namespace ICSharpCode.FormsDesigner.Gui
}
}
Dictionary<string, object> GetResources(string fileName)
Dictionary<string, object> GetResources(FileName fileName)
{
Stream s = null;
WorkbenchSingleton.SafeThreadCall(
delegate {
OpenedFile file = FileService.GetOpenedFile(fileName);
if (file != null) {
s = file.OpenRead();
}
});
SD.MainThread.InvokeIfRequired(delegate {
OpenedFile file = SD.FileService.GetOpenedFile(fileName);
if (file != null) {
s = file.OpenRead();
}
});
if (s == null) {
s = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
}

26
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/ImageResourceEditorDialog.resx

@ -112,24 +112,26 @@ @@ -112,24 +112,26 @@
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="cancelButton.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cancelButton.GenerateMember" type="System.Boolean, mscorlib">
<value>False</value>
</metadata>
<metadata name="splitContainer.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
</data>
<data name="splitContainer.GenerateMember" type="System.Boolean, mscorlib">
<value>False</value>
</metadata>
<metadata name="resourceSelectionGroup.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
</data>
<data name="resourceSelectionGroup.GenerateMember" type="System.Boolean, mscorlib">
<value>False</value>
</metadata>
<metadata name="previewGroup.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
</data>
<data name="previewGroup.GenerateMember" type="System.Boolean, mscorlib">
<value>False</value>
</metadata>
<metadata name="projectTreeScanningBackgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="projectTreeScanningBackgroundWorker.TrayLocation" type="System.Drawing.Point, System.Drawing">
<value>17, 17</value>
</metadata>
</data>
</root>

8
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml.cs

@ -48,11 +48,9 @@ namespace ICSharpCode.FormsDesigner.Gui.OptionPanels @@ -48,11 +48,9 @@ namespace ICSharpCode.FormsDesigner.Gui.OptionPanels
static T GetPropertySafe<T>(string name, T defaultValue)
{
if (PropertyService.Initialized) {
return PropertyService.Get<T>(name, defaultValue);
} else {
return defaultValue;
}
// This wrapper is no longer necessary in SD5;
// if the actual property service isn't available (in unit tests), a dummy property service is used
return PropertyService.Get<T>(name, defaultValue);
}
public override bool SaveOptions()

11
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/SecondaryDisplayBinding.cs

@ -12,6 +12,7 @@ using ICSharpCode.SharpDevelop; @@ -12,6 +12,7 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.FormsDesigner
{
@ -58,7 +59,7 @@ namespace ICSharpCode.FormsDesigner @@ -58,7 +59,7 @@ namespace ICSharpCode.FormsDesigner
return false;
}
public static bool IsDesignable(IParsedFile parsedFile, ICompilation compilation)
public static bool IsDesignable(IUnresolvedFile parsedFile, ICompilation compilation)
{
if (parsedFile == null)
return false;
@ -77,17 +78,17 @@ namespace ICSharpCode.FormsDesigner @@ -77,17 +78,17 @@ namespace ICSharpCode.FormsDesigner
public bool CanAttachTo(IViewContent viewContent)
{
if (viewContent is ITextEditorProvider) {
ITextEditorProvider textEditorProvider = (ITextEditorProvider)viewContent;
FileName fileName = viewContent.PrimaryFileName;
if (fileName == null)
return false;
ITextEditor textEditor = viewContent.GetService<ITextEditor>();
string fileExtension = Path.GetExtension(fileName).ToLowerInvariant();
switch (fileExtension) {
case ".cs":
// case ".vb":
var parsedFile = SD.ParserService.ParseFile(fileName, textEditorProvider.TextEditor.Document);
var parsedFile = SD.ParserService.ParseFile(fileName, textEditor.Document);
var compilation = SD.ParserService.GetCompilationForFile(fileName);
if (IsDesignable(parsedFile, compilation))
return true;
@ -99,6 +100,8 @@ namespace ICSharpCode.FormsDesigner @@ -99,6 +100,8 @@ namespace ICSharpCode.FormsDesigner
public IViewContent[] CreateSecondaryViewContent(IViewContent viewContent)
{
return new IViewContent[0];
/*
if (viewContent.SecondaryViewContents.Any(c => c is FormsDesignerViewContent)) {
return new IViewContent[0];
}
@ -125,7 +128,7 @@ namespace ICSharpCode.FormsDesigner @@ -125,7 +128,7 @@ namespace ICSharpCode.FormsDesigner
default:
throw new ApplicationException("Cannot create content for " + fileExtension);
}
return new IViewContent[] { new FormsDesignerViewContent(viewContent, loader, generator) };
return new IViewContent[] { new FormsDesignerViewContent(viewContent, loader, generator) }; */
}
}
}

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

@ -78,7 +78,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -78,7 +78,7 @@ namespace ICSharpCode.FormsDesigner.Services
var projectResource = dictService.GetValue(ProjectResourceService.ProjectResourceKey + context.PropertyDescriptor.Name) as ProjectResourceInfo;
IProject project = prs.ProjectContent.Project as IProject;
IProject project = prs.ProjectContent;
ImageResourceEditorDialog dialog;
if (projectResource != null && Object.ReferenceEquals(projectResource.OriginalValue, value) && prs.DesignerSupportsProjectResources) {

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

@ -6,7 +6,9 @@ using System.Collections; @@ -6,7 +6,9 @@ using System.Collections;
using System.IO;
using System.Resources;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.FormsDesigner.Services
{
@ -15,14 +17,14 @@ namespace ICSharpCode.FormsDesigner.Services @@ -15,14 +17,14 @@ namespace ICSharpCode.FormsDesigner.Services
/// </summary>
public sealed class ProjectResourceInfo
{
readonly string resourceFile;
readonly FileName resourceFile;
readonly string resourceKey;
readonly object originalValue;
/// <summary>
/// Gets the full file name of the resource file that contains the resource.
/// </summary>
public string ResourceFile {
public FileName ResourceFile {
get { return resourceFile; }
}
@ -48,7 +50,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -48,7 +50,7 @@ namespace ICSharpCode.FormsDesigner.Services
/// </summary>
/// <param name="resourceFile">The full name of the resource file that contains the resource.</param>
/// <param name="resourceKey">The resource key.</param>
public ProjectResourceInfo(string resourceFile, string resourceKey)
public ProjectResourceInfo(FileName resourceFile, string resourceKey)
{
if (resourceFile == null)
throw new ArgumentNullException("resourceFile");
@ -59,7 +61,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -59,7 +61,7 @@ namespace ICSharpCode.FormsDesigner.Services
if (File.Exists(resourceFile)) {
OpenedFile openedFile = FileService.GetOpenedFile(resourceFile);
OpenedFile openedFile = SD.FileService.GetOpenedFile(resourceFile);
Stream s;
if (openedFile != null) {
s = openedFile.OpenRead();

30
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ProjectResourceService.cs

@ -7,6 +7,7 @@ using System.IO; @@ -7,6 +7,7 @@ using System.IO;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
@ -37,14 +38,14 @@ namespace ICSharpCode.FormsDesigner.Services @@ -37,14 +38,14 @@ namespace ICSharpCode.FormsDesigner.Services
set {
if (value == null)
throw new ArgumentNullException("value");
if (this.projectContent != value) {
this.projectContent = value;
if (this.project != value) {
this.project = value;
this.stringLiteralDelimiter = null;
}
}
}
public bool DesignerSupportsProjectResources {
public bool DesignerSupportsProjectResources {
get { return designerSupportsProjectResources; }
set { designerSupportsProjectResources = value; }
}
@ -57,7 +58,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -57,7 +58,7 @@ namespace ICSharpCode.FormsDesigner.Services
get {
if (stringLiteralDelimiter == null) {
const string TestString = "A";
string testCode = this.projectContent.Language.CodeGenerator.GenerateCode(new NRefactory.Ast.PrimitiveExpression(TestString, TestString), String.Empty);
string testCode = project.GetAmbience().ConvertConstantValue(TestString);
stringLiteralDelimiter = testCode.Substring(0, testCode.IndexOf(TestString, StringComparison.Ordinal));
}
return stringLiteralDelimiter;
@ -75,6 +76,8 @@ namespace ICSharpCode.FormsDesigner.Services @@ -75,6 +76,8 @@ namespace ICSharpCode.FormsDesigner.Services
return null;
}
throw new NotImplementedException();
/*
// Get the (generated) class where the resource is defined.
IClass resourceClass = this.projectContent.GetClassByReflectionName(typeRef.Type.BaseType, true);
if (resourceClass == null) {
@ -121,8 +124,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -121,8 +124,7 @@ namespace ICSharpCode.FormsDesigner.Services
// It would be better if we could use a real code parser for this, but
// that is not possible without getting dependent on the programming language.
IDocument doc = new ICSharpCode.SharpDevelop.Editor.AvalonEdit.AvalonEditDocumentAdapter();
doc.Text = ParserService.GetParseableFileContent(resourceClass.CompilationUnit.FileName).Text;
IDocument doc = new ReadOnlyDocument(SD.FileService.GetFileContent(resourceClass.CompilationUnit.FileName));
int startOffset = doc.PositionToOffset(prop.GetterRegion.BeginLine, prop.GetterRegion.BeginColumn);
int endOffset = doc.PositionToOffset(prop.GetterRegion.EndLine, prop.GetterRegion.EndColumn);
@ -153,7 +155,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -153,7 +155,7 @@ namespace ICSharpCode.FormsDesigner.Services
string resourceKey = code.Substring(index, endIndex - index);
LoggingService.Debug("-> Decoded resource: In: " + resourceFileName + ". Key: " + resourceKey);
return new ProjectResourceInfo(resourceFileName, resourceKey);
return new ProjectResourceInfo(resourceFileName, resourceKey);*/
}
/// <summary>
@ -162,18 +164,10 @@ namespace ICSharpCode.FormsDesigner.Services @@ -162,18 +164,10 @@ namespace ICSharpCode.FormsDesigner.Services
/// </summary>
public static bool IsGeneratedResourceClass(ITypeDefinition @class)
{
IClass generatedCodeAttributeClass = @class.ProjectContent.GetClass("System.CodeDom.Compiler.GeneratedCodeAttribute", 0);
if (generatedCodeAttributeClass == null) {
LoggingService.Info("Could not find the class for 'System.CodeDom.Compiler.GeneratedCodeAttribute'.");
return false;
}
IReturnType generatedCodeAttribute = generatedCodeAttributeClass.DefaultReturnType;
return @class.Attributes.Any(
att =>
att.AttributeType.Equals(generatedCodeAttribute) &&
IAttribute att = @class.GetAttribute(new TopLevelTypeName("System.CodeDom.Compiler", "GeneratedCodeAttribute"), false);
return att != null &&
att.PositionalArguments.Count == 2 &&
String.Equals("System.Resources.Tools.StronglyTypedResourceBuilder", att.PositionalArguments[0] as string, StringComparison.Ordinal)
);
String.Equals("System.Resources.Tools.StronglyTypedResourceBuilder", att.PositionalArguments[0].ConstantValue as string, StringComparison.Ordinal);
}
}
}

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

@ -243,11 +243,12 @@ namespace ICSharpCode.FormsDesigner.Services @@ -243,11 +243,12 @@ namespace ICSharpCode.FormsDesigner.Services
static string CodeStatementToString(CodeStatement statement)
{
CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator();
using(StringWriter sw = new StringWriter(System.Globalization.CultureInfo.InvariantCulture)) {
outputGenerator.PublicGenerateCodeFromStatement(statement, sw, null);
return sw.ToString().TrimEnd();
}
throw new NotImplementedException();
// CodeDomVerboseOutputGenerator outputGenerator = new CodeDomVerboseOutputGenerator();
// using(StringWriter sw = new StringWriter(System.Globalization.CultureInfo.InvariantCulture)) {
// outputGenerator.PublicGenerateCodeFromStatement(statement, sw, null);
// return sw.ToString().TrimEnd();
// }
}
}
}

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

@ -11,8 +11,10 @@ using System.Linq; @@ -11,8 +11,10 @@ using System.Linq;
using System.Resources.Tools;
using ICSharpCode.Core;
using ICSharpCode.EasyCodeDom;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.CSharp;
namespace ICSharpCode.FormsDesigner.Services
{
@ -69,7 +71,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -69,7 +71,7 @@ namespace ICSharpCode.FormsDesigner.Services
return false;
}
IProject project = prs.ProjectContent.Project as IProject;
IProject project = prs.ProjectContent;
if (project == null) {
LoggingService.Warn("Serializer cannot proceed because project is not an IProject");
return false;
@ -85,22 +87,22 @@ namespace ICSharpCode.FormsDesigner.Services @@ -85,22 +87,22 @@ namespace ICSharpCode.FormsDesigner.Services
FileUtility.IsEqualFileName(fpi.DependentUpon, resourceFileName) &&
fpi.ItemType == ItemType.Compile &&
fpi.VirtualName.ToUpperInvariant().Contains("DESIGNER")
);
).ToList();
if (items.Count() != 1) {
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;
FileName resourceCodeFile = items.Single().FileName;
// We expect a single class to be in this file.
IClass resourceClass = ParserService.GetParseInformation(resourceCodeFile).CompilationUnit.Classes.Single();
var resourceClass = SD.ParserService.GetExistingUnresolvedFile(resourceCodeFile).TopLevelTypeDefinitions.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);
string resourcePropertyName = StronglyTypedResourceBuilder.VerifyResourceName(resourceInfo.ResourceKey, prs.ProjectContent.CreateCodeDomProvider() ?? new CSharpCodeProvider());
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.");
}
@ -108,7 +110,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -108,7 +110,7 @@ namespace ICSharpCode.FormsDesigner.Services
// 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: '" + resourceClass.FullName + "', Resource property: '" + resourcePropertyName + "'");
var targetObjectExpr = base.SerializeToExpression(manager, value);
if (targetObjectExpr == null) {
@ -123,7 +125,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -123,7 +125,7 @@ namespace ICSharpCode.FormsDesigner.Services
var propRefSource =
Easy.Type(
new CodeTypeReference(resourceClass.FullyQualifiedName, CodeTypeReferenceOptions.GlobalReference)
new CodeTypeReference(resourceClass.FullName, CodeTypeReferenceOptions.GlobalReference)
).Property(resourcePropertyName);
var extAttr = propDesc.Attributes[typeof(ExtenderProvidedPropertyAttribute)] as ExtenderProvidedPropertyAttribute;

37
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ResourceStore.cs

@ -12,6 +12,7 @@ using ICSharpCode.Core; @@ -12,6 +12,7 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.FormsDesigner.Services
{
@ -56,7 +57,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -56,7 +57,7 @@ namespace ICSharpCode.FormsDesigner.Services
void CreateOpenedFileForStorage(ResourceStorage storage, string fileName, bool isExistingFile)
{
storage.OpenedFile = FileService.GetOrCreateOpenedFile(fileName);
storage.OpenedFile = SD.FileService.GetOrCreateOpenedFile(fileName);
storage.IsNewFile = !isExistingFile;
if (!isExistingFile && storage.OpenedFile.RegisteredViewContents.Count == 0) {
storage.OpenedFile.SetData(new byte[0]);
@ -108,11 +109,11 @@ namespace ICSharpCode.FormsDesigner.Services @@ -108,11 +109,11 @@ namespace ICSharpCode.FormsDesigner.Services
IResourceWriter writer;
byte[] buffer;
readonly string cultureName;
string parentDesignerSourceFileName;
FileName parentDesignerSourceFileName;
internal OpenedFile OpenedFile;
internal bool IsNewFile;
public ResourceStorage(string cultureName, string parentDesignerSourceFileName)
public ResourceStorage(string cultureName, FileName parentDesignerSourceFileName)
{
this.cultureName = cultureName;
this.parentDesignerSourceFileName = parentDesignerSourceFileName;
@ -245,19 +246,11 @@ namespace ICSharpCode.FormsDesigner.Services @@ -245,19 +246,11 @@ namespace ICSharpCode.FormsDesigner.Services
Resources = 1
};
static IProject GetProject(string formFileName)
{
if (ProjectService.OpenSolution != null && formFileName != null)
return ProjectService.OpenSolution.FindProjectContainingFile(formFileName);
else
return null;
}
void AddFileToProject(ResourceStorage storage)
{
string resourceFileName = storage.OpenedFile.FileName;
string formFileName = viewContent.PrimaryFileName;
IProject project = GetProject(formFileName);
FileName resourceFileName = storage.OpenedFile.FileName;
FileName formFileName = viewContent.PrimaryFileName;
IProject project = SD.ProjectService.FindProjectContainingFile(formFileName);
// Add this resource file to the project
if (project != null && !project.IsFileInProject(resourceFileName)) {
@ -267,7 +260,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -267,7 +260,7 @@ namespace ICSharpCode.FormsDesigner.Services
ProjectService.AddProjectItem(project, newFileProjectItem);
FileService.FireFileCreated(resourceFileName, false);
PadDescriptor pd = WorkbenchSingleton.Workbench.GetPad(typeof(ProjectBrowserPad));
PadDescriptor pd = SD.Workbench.GetPad(typeof(ProjectBrowserPad));
FileNode formFileNode = ((ProjectBrowserPad)pd.PadContent).ProjectBrowserControl.FindFileNode(formFileName);
if (formFileNode != null) {
LoggingService.Info("FormFileNode found, adding subitem");
@ -279,12 +272,12 @@ namespace ICSharpCode.FormsDesigner.Services @@ -279,12 +272,12 @@ namespace ICSharpCode.FormsDesigner.Services
}
}
static string CalcResourceFileName(string formFileName, string cultureName)
static string CalcResourceFileName(FileName formFileName, string cultureName)
{
StringBuilder resourceFileName = null;
IProject project = GetProject(formFileName);
IProject project = SD.ProjectService.FindProjectContainingFile(formFileName);
if (formFileName != null && formFileName != String.Empty) {
if (formFileName != null) {
resourceFileName = new StringBuilder(Path.GetDirectoryName(formFileName));
} else if (project != null) {
resourceFileName = new StringBuilder(project.Directory);
@ -306,7 +299,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -306,7 +299,7 @@ namespace ICSharpCode.FormsDesigner.Services
// assume the resource file name to be equal to the current source file name.
// Remove the ".Designer" part if present.
sourceFileName = Path.GetFileNameWithoutExtension(formFileName);
if (sourceFileName != null && sourceFileName.ToLowerInvariant().EndsWith(".designer")) {
if (sourceFileName != null && sourceFileName.EndsWith(".designer", StringComparison.OrdinalIgnoreCase)) {
sourceFileName = sourceFileName.Substring(0, sourceFileName.Length - 9);
}
}
@ -337,7 +330,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -337,7 +330,7 @@ namespace ICSharpCode.FormsDesigner.Services
return new ResXResourceReader(stream);
}
internal static IResourceWriter CreateResourceWriter(Stream stream, ResourceType type, string parentDesignerSourceFileName)
internal static IResourceWriter CreateResourceWriter(Stream stream, ResourceType type, FileName parentDesignerSourceFileName)
{
if (type == ResourceType.Resources) {
return new ResourceWriter(stream);
@ -345,9 +338,9 @@ namespace ICSharpCode.FormsDesigner.Services @@ -345,9 +338,9 @@ namespace ICSharpCode.FormsDesigner.Services
return new ResXResourceWriter(stream, t => ResXConverter.ConvertTypeName(t, parentDesignerSourceFileName));
}
internal static ResourceType GetResourceType(string fileName)
internal static ResourceType GetResourceType(FileName fileName)
{
if (Path.GetExtension(fileName).ToLowerInvariant() == ".resx") {
if (fileName.HasExtension(".resx")) {
return ResourceType.Resx;
}
return ResourceType.Resources;

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

@ -9,6 +9,8 @@ using System.IO; @@ -9,6 +9,8 @@ using System.IO;
using System.Reflection;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Designer;
namespace ICSharpCode.FormsDesigner.Services
{
@ -40,7 +42,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -40,7 +42,7 @@ namespace ICSharpCode.FormsDesigner.Services
// ToArray to prevent an exception if the collection changes.
foreach (Assembly asm in TypeResolutionService.DesignerAssemblies.ToArray()) {
if (excludeGlobalTypes) {
if (GacInterop.IsWithinGac(asm.Location)) {
if (SD.GlobalAssemblyCache.IsGacAssembly(asm.Location)) {
continue;
}
}

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

@ -1,588 +0,0 @@ @@ -1,588 +0,0 @@
// 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 System.ComponentModel.Design;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using Microsoft.Win32;
namespace ICSharpCode.FormsDesigner.Services
{
public class TypeResolutionService : ITypeResolutionService
{
readonly static List<Assembly> designerAssemblies = new List<Assembly>();
// hash of file content -> Assembly
readonly static Dictionary<string, Assembly> assemblyDict = new Dictionary<string, Assembly>();
/// <summary>
/// List of assemblies used by the form designer. This static list is not an optimal solution,
/// but better than using AppDomain.CurrentDomain.GetAssemblies(). See SD2-630.
/// </summary>
public static List<Assembly> DesignerAssemblies {
get {
return designerAssemblies;
}
}
static TypeResolutionService()
{
ClearMixedAssembliesTemporaryFiles();
DesignerAssemblies.Add(ProjectContentRegistry.MscorlibAssembly);
DesignerAssemblies.Add(ProjectContentRegistry.SystemAssembly);
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")]
private static extern bool MoveFileEx(string lpExistingFileName, string lpNewFileName, int dwFlags);
const int MOVEFILE_DELAY_UNTIL_REBOOT = 0x00000004;
static void MarkFileToDeleteOnReboot(string fileName)
{
MoveFileEx(fileName, null, MOVEFILE_DELAY_UNTIL_REBOOT);
}
static void ClearMixedAssembliesTemporaryFiles()
{
string[] files = Directory.GetFiles(Path.GetTempPath(), "*.sd_forms_designer_mixed_assembly.dll");
foreach (string fileName in files) {
try {
File.Delete(fileName);
} catch {}
}
/* We don't need to debug controls inside the forms designer
files = Directory.GetFiles(Path.GetTempPath(), "*.pdb");
foreach (string fileName in files) {
try {
File.Delete(fileName);
} catch {}
}*/
}
string formSourceFileName;
IProject callingProject;
/// <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);
/// <summary>
/// Gets the project content of the project that created this TypeResolutionService.
/// Returns null when no calling project was specified.
/// </summary>
public IProject 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)
{
this.formSourceFileName = formSourceFileName;
}
readonly HashSet<IProject> projectContentsCurrentlyLoadingAssembly = new HashSet<IProjectContent>();
/// <summary>
/// Loads the assembly represented by the project content. Returns null on failure.
/// </summary>
public Assembly LoadAssembly(IProject pc)
{
WorkbenchSingleton.AssertMainThread();
// prevent StackOverflow when project contents have cyclic dependencies
// Very popular example of cyclic dependency: System <-> System.Xml
if (!projectContentsCurrentlyLoadingAssembly.Add(pc))
return null;
Assembly sdAssembly;
if (IsSharpDevelopAssembly(pc, out sdAssembly))
return sdAssembly;
try {
// load dependencies of current assembly
foreach (IProjectContent rpc in pc.ThreadSafeGetReferencedContents()) {
if (rpc is ParseProjectContent) {
LoadAssembly(rpc);
} else if (rpc is ReflectionProjectContent) {
ReflectionProjectContent rrpc = (ReflectionProjectContent)rpc;
if (!rrpc.IsGacAssembly) {
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 (rpc.IsGacAssembly)
return LoadAssembly(new AssemblyName(rpc.AssemblyFullName), false);
else
return LoadAssembly(rpc.AssemblyLocation);
} else {
return null;
}
}
readonly string sharpDevelopRoot = Directory.GetParent(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).FullName;
bool IsSharpDevelopAssembly(IUnresolvedAssembly pc, out Assembly assembly)
{
assembly = null;
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) {
if (!asm.IsDynamic && asm.Location.StartsWith(sharpDevelopRoot, StringComparison.OrdinalIgnoreCase) && pc.AssemblyName == asm.GetName().Name) {
assembly = asm;
return true;
}
}
return false;
}
static string GetHash(string fileName)
{
return Path.GetFileName(fileName).ToLowerInvariant() + File.GetLastWriteTimeUtc(fileName).Ticks.ToString();
}
static string GetOriginalAssemblyFullPath(Assembly asm)
{
if (asm == null) throw new ArgumentNullException("asm");
try {
return new Uri(asm.CodeBase, UriKind.Absolute).LocalPath;
} catch (UriFormatException ex) {
LoggingService.Warn("Could not determine path for assembly '" + asm.ToString() + "', CodeBase='" + asm.CodeBase + "': " + ex.Message);
return asm.Location;
} catch (InvalidOperationException ex) {
LoggingService.Warn("Could not determine path for assembly '" + asm.ToString() + "', CodeBase='" + asm.CodeBase + "': " + ex.Message);
return asm.Location;
}
}
/// <summary>
/// Loads the file in none-locking mode. Returns null on failure.
/// </summary>
public Assembly LoadAssembly(string fileName)
{
if (!File.Exists(fileName))
return null;
// FIX for SD2-716, remove when designer gets its own AppDomain
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
try {
if (string.Equals(GetOriginalAssemblyFullPath(asm), fileName, StringComparison.OrdinalIgnoreCase)) {
RegisterAssembly(asm);
return asm;
}
} catch (NotSupportedException) {
// Fixes forum-12823
}
}
string hash = GetHash(fileName);
lock (assemblyDict) {
Assembly asm;
if (assemblyDict.TryGetValue(hash, out asm))
return asm;
LoggingService.Debug("Loading assembly " + fileName + " (hash " + hash + ")");
try {
asm = Assembly.Load(File.ReadAllBytes(fileName));
} catch (BadImageFormatException e) {
if (e.Message.Contains("HRESULT: 0x8013141D")) {
LoggingService.Debug("Get HRESULt 0x8013141D, loading netmodule");
//netmodule
string tempPath = Path.GetTempFileName();
File.Delete(tempPath);
tempPath += ".sd_forms_designer_netmodule_assembly.dll";
try {
//convert netmodule to assembly
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = Path.GetDirectoryName(typeof(object).Module.FullyQualifiedName) + Path.DirectorySeparatorChar + "al.exe";
p.StartInfo.Arguments = "\"" + fileName +"\" /out:\"" + tempPath + "\"";
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
if(p.ExitCode == 0 && File.Exists(tempPath)) {
byte[] asm_data = File.ReadAllBytes(tempPath);
asm = Assembly.Load(asm_data);
asm.LoadModule(Path.GetFileName(fileName), File.ReadAllBytes(fileName));
}
} catch (Exception ex) {
MessageService.ShowException(ex, "Error calling linker for netmodule");
}
try {
File.Delete(tempPath);
} catch {}
} else {
// Show other load errors in the compiler message view,
// but do not prevent the designer from loading.
// 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"
);
return null;
}
} catch (FileLoadException e) {
if (e.Message.Contains("HRESULT: 0x80131402")) {
LoggingService.Debug("Get HRESULt 0x80131402, loading mixed modes asm from disk");
//this is C++/CLI Mixed assembly which can only be loaded from disk, not in-memory
string tempPath = Path.GetTempFileName();
File.Delete(tempPath);
tempPath += ".sd_forms_designer_mixed_assembly.dll";
File.Copy(fileName, tempPath);
/* We don't need to debug controls inside the forms designer
string pdbpath = Path.GetDirectoryName(fileName) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(fileName) + ".pdb";
if (File.Exists(pdbpath)) {
string newpdbpath = Path.GetTempPath() + Path.DirectorySeparatorChar + Path.GetFileName(pdbpath);
try {
File.Copy(pdbpath, newpdbpath);
MarkFileToDeleteOnReboot(newpdbpath);
} catch {
}
}
*/
asm = Assembly.LoadFile(tempPath);
MarkFileToDeleteOnReboot(tempPath);
} else if (e.Message.Contains("HRESULT: 0x80131019")) {
LoggingService.Debug(e.Message);
LoggingService.Debug("Attempting to load unverifiable assembly. Ignoring.");
return null;
} else {
throw; // don't ignore other load errors
}
}
lock (designerAssemblies) {
if (!designerAssemblies.Contains(asm))
designerAssemblies.Insert(0, asm);
}
lock (this.loadedAssembliesForCurrentDocument) {
this.loadedAssembliesForCurrentDocument[fileName] = hash;
}
assemblyDict[hash] = asm;
return asm;
}
}
void RegisterAssembly(Assembly asm)
{
string file = GetOriginalAssemblyFullPath(asm);
if (!String.IsNullOrEmpty(file)) {
string hash = GetHash(file);
lock (assemblyDict) {
assemblyDict[hash] = asm;
}
lock (this.loadedAssembliesForCurrentDocument) {
this.loadedAssembliesForCurrentDocument[file] = hash;
}
}
lock (designerAssemblies) {
if (!designerAssemblies.Contains(asm))
designerAssemblies.Insert(0, asm);
}
}
public Assembly GetAssembly(AssemblyName name)
{
return LoadAssembly(name, false);
}
public Assembly GetAssembly(AssemblyName name, bool throwOnError)
{
return LoadAssembly(name, throwOnError);
}
Assembly LoadAssembly(AssemblyName name, bool throwOnError)
{
try {
Assembly asm = Assembly.Load(name);
RegisterAssembly(asm);
return asm;
} catch (System.IO.FileLoadException) {
if (throwOnError)
throw;
return null;
}
}
public string GetPathOfAssembly(AssemblyName name)
{
Assembly assembly = GetAssembly(name);
if (assembly != null) {
return GetOriginalAssemblyFullPath(assembly);
}
return null;
}
public Type GetType(string name)
{
return GetType(name, false, false);
}
public Type GetType(string name, bool throwOnError)
{
return GetType(name, throwOnError, false);
}
#if DEBUG
int count = 0;
#endif
Dictionary<string, Type> typeCache = new Dictionary<string, Type>(StringComparer.Ordinal);
Dictionary<string, Type> typeCacheIgnoreCase = new Dictionary<string, Type>(StringComparer.OrdinalIgnoreCase);
public void ClearCaches()
{
typeCacheIgnoreCase.Clear();
typeCache.Clear();
}
public Type GetType(string name, bool throwOnError, bool ignoreCase)
{
if (name == null || name.Length == 0) {
return null;
}
if (IgnoreType(name)) {
return null;
}
if (ignoreCase) {
Type cachedType;
if (typeCacheIgnoreCase.TryGetValue(name, out cachedType))
return cachedType;
} else {
Type cachedType;
if (typeCache.TryGetValue(name, out cachedType))
return cachedType;
}
#if DEBUG
if (!name.StartsWith("System.")) {
count++;
LoggingService.Debug(count + " TypeResolutionService: Looking for " + name);
}
#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);
}
}
}
}
// type lookup for typename, assembly, xyz style lookups
if (type == null) {
int idx = name.IndexOf(",");
if (idx > 0) {
string[] splitName = name.Split(',');
string typeName = splitName[0];
string assemblyName = splitName[1].Substring(1);
Assembly assembly = null;
try {
assembly = Assembly.Load(assemblyName);
} catch (Exception e) {
LoggingService.Error(e);
}
if (assembly != null) {
string fileName = GetOriginalAssemblyFullPath(assembly);
if (!String.IsNullOrEmpty(fileName)) {
lock (this.loadedAssembliesForCurrentDocument) {
this.loadedAssembliesForCurrentDocument[fileName] = GetHash(fileName);
}
}
lock (designerAssemblies) {
if (!designerAssemblies.Contains(assembly))
designerAssemblies.Add(assembly);
}
type = assembly.GetType(typeName, false, ignoreCase);
} else {
type = Type.GetType(typeName, false, ignoreCase);
}
}
}
if (type == null) {
lock (designerAssemblies) {
foreach (Assembly asm in DesignerAssemblies) {
try {
Type t = asm.GetType(name, false);
if (t != null) {
AddToCache(name, t, ignoreCase);
return t;
}
} catch (FileNotFoundException) {
} catch (FileLoadException) {
} catch (BadImageFormatException) {
// ignore assembly load errors
}
}
}
}
if (throwOnError && type == null)
throw new TypeLoadException(name + " not found by TypeResolutionService");
AddToCache(name, type, ignoreCase);
return type;
} catch (Exception e) {
LoggingService.Error(e);
}
return null;
}
void AddToCache(string name, Type type, bool ignoreCase)
{
if (type == null)
return;
if (ignoreCase) {
typeCacheIgnoreCase.Add(name, type);
} else {
typeCache.Add(name, type);
}
}
public void ReferenceAssembly(AssemblyName name)
{
ICSharpCode.Core.LoggingService.Warn("TODO: Add Assembly reference : " + name);
}
/// <summary>
/// Gets whether an assembly referenced by the currently designed document
/// has been changed since it has been loaded.
/// </summary>
public bool ReferencedAssemblyChanged {
get {
return this.loadedAssembliesForCurrentDocument.Any(
pair => !File.Exists(pair.Key) || !String.Equals(pair.Value, GetHash(pair.Key), StringComparison.Ordinal)
);
}
}
#region VSDesigner workarounds
/// <summary>
/// HACK - Ignore any requests for types from the Microsoft.VSDesigner
/// assembly. There are smart tag problems if data adapter
/// designers are used from this assembly.
/// </summary>
bool IgnoreType(string name)
{
int idx = name.IndexOf(",");
if (idx > 0) {
string[] splitName = name.Split(',');
string assemblyName = splitName[1].Substring(1);
if (assemblyName == "Microsoft.VSDesigner") {
return true;
}
}
return false;
}
static string vsDesignerIdeDir;
static void RegisterVSDesignerWorkaround()
{
if (vsDesignerIdeDir == null) {
vsDesignerIdeDir = "";
try {
using(RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS")) {
if (key != null) {
vsDesignerIdeDir = key.GetValue("VS7CommonDir") as string ?? "";
}
}
} catch (System.Security.SecurityException) {
// registry access might be denied
}
if (vsDesignerIdeDir.Length > 0) {
vsDesignerIdeDir = Path.Combine(vsDesignerIdeDir, "IDE");
AppDomain.CurrentDomain.AssemblyResolve += delegate(object sender, ResolveEventArgs args) {
string shortName = args.Name;
if (shortName.IndexOf(',') >= 0) {
shortName = shortName.Substring(0, shortName.IndexOf(','));
}
if (shortName.StartsWith("Microsoft.")
&& File.Exists(Path.Combine(vsDesignerIdeDir, shortName + ".dll")))
{
return Assembly.LoadFrom(Path.Combine(vsDesignerIdeDir, shortName + ".dll"));
}
return null;
};
}
}
}
#endregion
static Assembly AssemblyResolveEventHandler(object sender, ResolveEventArgs args)
{
LoggingService.Debug("TypeResolutionService: AssemblyResolveEventHandler: " + args.Name);
Assembly lastAssembly = null;
foreach (Assembly asm in TypeResolutionService.DesignerAssemblies) {
if (asm.FullName == args.Name) {
return asm;
}
}
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
if (asm.FullName == args.Name) {
lastAssembly = asm;
}
}
if (lastAssembly != null) {
TypeResolutionService.DesignerAssemblies.Add(lastAssembly);
LoggingService.Info("ICSharpAssemblyResolver found..." + args.Name);
}
return lastAssembly;
}
}
}

2
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/ToolboxProvider.cs

@ -48,7 +48,7 @@ namespace ICSharpCode.FormsDesigner @@ -48,7 +48,7 @@ namespace ICSharpCode.FormsDesigner
static void CreateToolboxService()
{
Debug.Assert(WorkbenchSingleton.InvokeRequired == false);
SD.MainThread.VerifyAccess();
if (toolboxService == null) {
sideBar = new SharpDevelopSideBar();
LoadToolbox();

1
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/UndoRedo/UndoEngine.cs

@ -6,6 +6,7 @@ using System.Collections.Generic; @@ -6,6 +6,7 @@ using System.Collections.Generic;
using System.ComponentModel.Design;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.WinForms;
namespace ICSharpCode.FormsDesigner.UndoRedo
{

5
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/OutputVisitor/CSharpAmbience.cs

@ -267,6 +267,11 @@ namespace ICSharpCode.NRefactory.CSharp @@ -267,6 +267,11 @@ namespace ICSharpCode.NRefactory.CSharp
astType.AcceptVisitor(new CSharpOutputVisitor(formatter, formattingPolicy));
}
public string ConvertConstantValue(object constantValue)
{
return CSharpOutputVisitor.PrintPrimitiveValue(constantValue);
}
public string WrapComment(string comment)
{
return "// " + comment;

1
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IAmbience.cs

@ -89,6 +89,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -89,6 +89,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
string ConvertEntity(IEntity entity);
string ConvertType(IType type);
string ConvertVariable(IVariable variable);
string ConvertConstantValue(object constantValue);
string WrapComment(string comment);
}

117
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/TypeSystemExtensions.cs

@ -85,6 +85,10 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -85,6 +85,10 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// </summary>
public static bool IsDerivedFrom(this ITypeDefinition type, ITypeDefinition baseType)
{
if (type == null)
throw new ArgumentNullException("type");
if (baseType == null)
return false;
if (type.Compilation != baseType.Compilation) {
throw new InvalidOperationException("Both arguments to IsDerivedFrom() must be from the same compilation.");
}
@ -535,7 +539,118 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -535,7 +539,118 @@ namespace ICSharpCode.NRefactory.TypeSystem
return reference.Resolve (compilation.TypeResolveContext);
}
#endregion
#region ITypeDefinition.GetAttribute
/// <summary>
/// Gets the attribute of the specified attribute type (or derived attribute types).
/// </summary>
/// <param name="entity">The entity on which the attributes are declared.</param>
/// <param name="attributeType">The attribute type to look for.</param>
/// <param name="inherit">
/// Specifies whether attributes inherited from base classes and base members (if the given <paramref name="entity"/> in an <c>override</c>)
/// should be returned. The default is <c>true</c>.
/// </param>
/// <returns>
/// Returns the attribute that was found; or <c>null</c> if none was found.
/// If inherit is true, an from the entity itself will be returned if possible;
/// and the base entity will only be searched if none exists.
/// </returns>
public static IAttribute GetAttribute(this IEntity entity, IType attributeType, bool inherit = true)
{
return GetAttributes(entity, attributeType, inherit).FirstOrDefault();
}
/// <summary>
/// Gets the attributes of the specified attribute type (or derived attribute types).
/// </summary>
/// <param name="entity">The entity on which the attributes are declared.</param>
/// <param name="attributeType">The attribute type to look for.</param>
/// <param name="inherit">
/// Specifies whether attributes inherited from base classes and base members (if the given <paramref name="entity"/> in an <c>override</c>)
/// should be returned. The default is <c>true</c>.
/// </param>
/// <returns>
/// Returns the list of attributes that were found.
/// If inherit is true, attributes from the entity itself are returned first; followed by attributes inherited from the base entity.
/// </returns>
public static IEnumerable<IAttribute> GetAttributes(this IEntity entity, IType attributeType, bool inherit = true)
{
if (entity == null)
throw new ArgumentNullException("entity");
if (attributeType == null)
throw new ArgumentNullException("attributeType");
return GetAttributes(entity, attributeType.Equals, inherit);
}
/// <summary>
/// Gets the attribute of the specified attribute type (or derived attribute types).
/// </summary>
/// <param name="entity">The entity on which the attributes are declared.</param>
/// <param name="attributeType">The attribute type to look for.</param>
/// <param name="inherit">
/// Specifies whether attributes inherited from base classes and base members (if the given <paramref name="entity"/> in an <c>override</c>)
/// should be returned. The default is <c>true</c>.
/// </param>
/// <returns>
/// Returns the attribute that was found; or <c>null</c> if none was found.
/// If inherit is true, an from the entity itself will be returned if possible;
/// and the base entity will only be searched if none exists.
/// </returns>
public static IAttribute GetAttribute(this IEntity entity, FullTypeName attributeType, bool inherit = true)
{
return GetAttributes(entity, attributeType, inherit).FirstOrDefault();
}
/// <summary>
/// Gets the attributes of the specified attribute type (or derived attribute types).
/// </summary>
/// <param name="entity">The entity on which the attributes are declared.</param>
/// <param name="attributeType">The attribute type to look for.</param>
/// <param name="inherit">
/// Specifies whether attributes inherited from base classes and base members (if the given <paramref name="entity"/> in an <c>override</c>)
/// should be returned. The default is <c>true</c>.
/// </param>
/// <returns>
/// Returns the list of attributes that were found.
/// If inherit is true, attributes from the entity itself are returned first; followed by attributes inherited from the base entity.
/// </returns>
public static IEnumerable<IAttribute> GetAttributes(this IEntity entity, FullTypeName attributeType, bool inherit = true)
{
if (entity == null)
throw new ArgumentNullException("entity");
return GetAttributes(entity, attrType => {
ITypeDefinition typeDef = attrType.GetDefinition();
return typeDef != null && typeDef.FullTypeName == attributeType;
}, inherit);
}
static IEnumerable<IAttribute> GetAttributes(IEntity entity, Predicate<IType> attributeTypePredicate, bool inherit)
{
if (!inherit) {
foreach (var attr in entity.Attributes) {
if (attributeTypePredicate(attr.AttributeType))
yield return attr;
}
yield break;
}
ITypeDefinition typeDef = entity as ITypeDefinition;
if (typeDef != null) {
foreach (var baseType in typeDef.GetNonInterfaceBaseTypes().Reverse()) {
ITypeDefinition baseTypeDef = baseType.GetDefinition();
if (baseTypeDef == null)
continue;
foreach (var attr in baseTypeDef.Attributes) {
if (attributeTypePredicate(attr.AttributeType))
yield return attr;
}
}
}
IMember member = entity as IMember;
if (member != null)
throw new NotImplementedException();
throw new NotSupportedException("Unknown entity type");
}
#endregion
#region IAssembly.GetTypeDefinition(string,string,int)
/// <summary>

11
src/Main/Base/Project/Src/Services/AmbienceService/DefaultAmbience.cs

@ -40,5 +40,16 @@ namespace ICSharpCode.SharpDevelop @@ -40,5 +40,16 @@ namespace ICSharpCode.SharpDevelop
{
return "// " + comment;
}
public string ConvertConstantValue(object constantValue)
{
if (constantValue == null)
return "null";
if (constantValue is char)
return "'" + constantValue + "'";
if (constantValue is String)
return "\"" + constantValue + "\"";
return constantValue.ToString();
}
}
}

2
src/Main/Base/Project/Util/ProcessRunner.cs

@ -484,7 +484,7 @@ namespace ICSharpCode.SharpDevelop @@ -484,7 +484,7 @@ namespace ICSharpCode.SharpDevelop
{
var currentProcess = new HandleRef(this, NativeMethods.GetCurrentProcess());
SafeWaitHandle safeWaitHandle;
if (!NativeMethods.DuplicateHandle(currentProcess, processHandle, currentProcess, out safeWaitHandle, 0, false, 2)) {
if (!NativeMethods.DuplicateHandle(currentProcess, processHandle, currentProcess, out safeWaitHandle, 0, false, NativeMethods.DUPLICATE_SAME_ACCESS)) {
throw new Win32Exception();
}
base.SafeWaitHandle = safeWaitHandle;

14
src/Main/Base/Project/WinForms/IWinFormsService.cs

@ -6,6 +6,7 @@ using System.ComponentModel; @@ -6,6 +6,7 @@ using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Widgets;
namespace ICSharpCode.SharpDevelop.WinForms
{
@ -113,5 +114,18 @@ namespace ICSharpCode.SharpDevelop.WinForms @@ -113,5 +114,18 @@ namespace ICSharpCode.SharpDevelop.WinForms
/// inside the host isn't)
/// </summary>
void SetContent(System.Windows.Controls.ContentPresenter contentControl, object content, IServiceProvider serviceProvider = null);
/// <summary>
/// Creates a new SDWindowsFormsHost instance.
/// </summary>
/// <param name="serviceProvider">The service provider that provides the IClipboardHandler, IUndoHandler etc. implementations.</param>
/// <param name="processShortcutsInWPF">
/// Determines whether the shortcuts for the default actions (Cut,Copy,Paste,Undo, etc.)
/// are processed by the WPF command system.
/// The default value is false. Pass true only if WinForms does not handle those shortcuts by itself.
/// See SD-1671 and SD-1737.
/// </param>
/// <returns>SDWindowsFormsHost instance</returns>
CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider serviceProvider = null, bool processShortcutsInWPF = false);
}
}

8
src/Main/Base/Project/Workbench/File/IFileService.cs

@ -93,12 +93,12 @@ namespace ICSharpCode.SharpDevelop.Workbench @@ -93,12 +93,12 @@ namespace ICSharpCode.SharpDevelop.Workbench
/// <summary>
/// Gets an opened file, or returns null if the file is not opened.
/// </summary>
OpenedFile GetOpenedFile(string fileName);
OpenedFile GetOpenedFile(FileName fileName);
/// <summary>
/// Gets an opened file, or returns null if the file is not opened.
/// </summary>
OpenedFile GetOpenedFile(FileName fileName);
OpenedFile GetOpenedFile(string fileName);
/// <summary>
/// Gets or creates an opened file.
@ -106,7 +106,7 @@ namespace ICSharpCode.SharpDevelop.Workbench @@ -106,7 +106,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
/// Make sure to attach a view to it, or call CloseIfAllViewsClosed on the OpenedFile to
/// unload the OpenedFile instance if no views were attached to it.
/// </summary>
OpenedFile GetOrCreateOpenedFile(string fileName);
OpenedFile GetOrCreateOpenedFile(FileName fileName);
/// <summary>
/// Gets or creates an opened file.
@ -114,7 +114,7 @@ namespace ICSharpCode.SharpDevelop.Workbench @@ -114,7 +114,7 @@ namespace ICSharpCode.SharpDevelop.Workbench
/// Make sure to attach a view to it, or call CloseIfAllViewsClosed on the OpenedFile to
/// unload the OpenedFile instance if no views were attached to it.
/// </summary>
OpenedFile GetOrCreateOpenedFile(FileName fileName);
OpenedFile GetOrCreateOpenedFile(string fileName);
/// <summary>
/// Creates a new untitled OpenedFile.

5
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/IMenuItemBuilder.cs

@ -13,4 +13,9 @@ namespace ICSharpCode.Core @@ -13,4 +13,9 @@ namespace ICSharpCode.Core
{
IEnumerable<object> BuildItems(Codon codon, object parameter);
}
[Obsolete("Use IMenuItemBuilder instead")]
public interface ISubmenuBuilder : IMenuItemBuilder
{
}
}

9
src/Main/SharpDevelop/WinForms/WinFormsService.cs

@ -8,6 +8,7 @@ using System.Windows.Forms; @@ -8,6 +8,7 @@ using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Widgets;
using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.SharpDevelop.WinForms
@ -171,5 +172,13 @@ namespace ICSharpCode.SharpDevelop.WinForms @@ -171,5 +172,13 @@ namespace ICSharpCode.SharpDevelop.WinForms
contentControl.Content = content;
}
}
public CustomWindowsFormsHost CreateWindowsFormsHost(IServiceProvider serviceProvider = null, bool processShortcutsInWPF = false)
{
return new SDWindowsFormsHost(processShortcutsInWPF) {
ServiceProvider = serviceProvider,
DisposeChild = false
};
}
}
}

Loading…
Cancel
Save