From 01253ffb9ce3976a85789f7340efc15178de08b7 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 13 Jun 2013 15:42:16 +0200 Subject: [PATCH] reintroduce ResourceEditor --- SharpDevelop.sln | 17 +++++++--- .../Project/CSharpBinding.csproj | 1 + .../Project/Src/CSharpLanguageBinding.cs | 4 +++ .../Project/ResourceEditor.csproj | 12 +++---- .../Project/ResourceEditor.csproj.user | 7 ----- .../Src/Commands/CopyResourceNameCommand.cs | 7 +++-- .../Project/Src/DisplayDefinition.cs | 14 +++++---- .../Project/Src/ResourceCodeGeneratorTool.cs | 31 +++++++++++-------- .../Project/Src/ResourceEdit/ResourceList.cs | 4 +-- .../LanguageBinding/DefaultLanguageBinding.cs | 6 ++++ .../LanguageBinding/ILanguageBinding.cs | 8 +++++ 11 files changed, 69 insertions(+), 42 deletions(-) delete mode 100644 src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj.user diff --git a/SharpDevelop.sln b/SharpDevelop.sln index 9eb0534988..08f278ad0d 100644 --- a/SharpDevelop.sln +++ b/SharpDevelop.sln @@ -69,7 +69,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WixBinding", "src\AddIns\Ba EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Scripting", "src\AddIns\BackendBindings\Scripting\Project\ICSharpCode.Scripting.csproj", "{7048AE18-EB93-4A84-82D0-DD60EB58ADBD}" EndProject -Project("{00000000-0000-0000-0000-000000000000}") = "VBNetBinding", "src\AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.vbproj", "{EB9FBA17-88C7-4BA6-8471-1088F8C494F5}" +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "VBNetBinding", "src\AddIns\BackendBindings\VBNetBinding\Project\VBNetBinding.vbproj", "{EB9FBA17-88C7-4BA6-8471-1088F8C494F5}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{F3662720-9EA2-4591-BBC6-97361DCE50A9}" EndProject @@ -149,6 +149,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfDesign.Designer", "src\A EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FormsDesigner", "src\AddIns\DisplayBindings\FormsDesigner\Project\FormsDesigner.csproj", "{0CD86A0B-73BB-4E7E-B476-AB84389164B1}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ResourceEditor", "src\AddIns\DisplayBindings\ResourceEditor\Project\ResourceEditor.csproj", "{E378E217-0C0C-473F-88A2-BF9748207511}" +EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Analysis", "Analysis", "{7019F43E-DFD7-4D1C-8C96-E75D55646DE7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "src\AddIns\Analysis\UnitTesting\UnitTesting.csproj", "{1F261725-6318-4434-A1B1-6C70CE4CD324}" @@ -279,6 +281,10 @@ Global {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Debug|Any CPU.Build.0 = Debug|Any CPU {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Release|Any CPU.ActiveCfg = Release|Any CPU {7048AE18-EB93-4A84-82D0-DD60EB58ADBD}.Release|Any CPU.Build.0 = Release|Any CPU + {EB9FBA17-88C7-4BA6-8471-1088F8C494F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB9FBA17-88C7-4BA6-8471-1088F8C494F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB9FBA17-88C7-4BA6-8471-1088F8C494F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB9FBA17-88C7-4BA6-8471-1088F8C494F5}.Release|Any CPU.Build.0 = Release|Any CPU {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Debug|Any CPU.Build.0 = Debug|Any CPU {9196DD8A-B4D4-4780-8742-C5762E547FC2}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -443,10 +449,10 @@ Global {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Debug|Any CPU.Build.0 = Debug|Any CPU {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.ActiveCfg = Release|Any CPU {3DF4060F-5EE0-41CF-8096-F27355FD5511}.Release|Any CPU.Build.0 = Release|Any CPU - {EB9FBA17-88C7-4BA6-8471-1088F8C494F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB9FBA17-88C7-4BA6-8471-1088F8C494F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB9FBA17-88C7-4BA6-8471-1088F8C494F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB9FBA17-88C7-4BA6-8471-1088F8C494F5}.Release|Any CPU.Build.0 = Release|Any CPU + {E378E217-0C0C-473F-88A2-BF9748207511}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E378E217-0C0C-473F-88A2-BF9748207511}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E378E217-0C0C-473F-88A2-BF9748207511}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E378E217-0C0C-473F-88A2-BF9748207511}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -521,6 +527,7 @@ Global {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} + {E378E217-0C0C-473F-88A2-BF9748207511} = {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} diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj index ddfb47d90d..883b300713 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj @@ -45,6 +45,7 @@ + 3.0 diff --git a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs index 6e2c5b2696..67bf90bfdc 100644 --- a/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs +++ b/src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs @@ -35,5 +35,9 @@ namespace CSharpBinding public override ICodeGenerator CodeGenerator { get { return new CSharpCodeGenerator(); } } + + public override System.CodeDom.Compiler.CodeDomProvider CodeDomProvider { + get { return new Microsoft.CSharp.CSharpCodeProvider(); } + } } } diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj index ab36b14336..5d221b8110 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj @@ -21,7 +21,7 @@ 4096 4 false - v4.0 + v4.5 @@ -92,6 +92,11 @@ + + {3B2A5653-EC97-4001-BB9B-D90F1AF2C371} + ICSharpCode.NRefactory + False + {2748AD25-9C63-4E12-877B-4DCE96FBED54} ICSharpCode.SharpDevelop @@ -107,11 +112,6 @@ ICSharpCode.Core.WinForms False - - {924EE450-603D-49C1-A8E5-4AFAA31CE6F3} - ICSharpCode.SharpDevelop.Dom - False - {8035765F-D51F-4A0C-A746-2FD100E19419} ICSharpCode.SharpDevelop.Widgets diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj.user b/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj.user deleted file mode 100644 index 4b01670e0b..0000000000 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.csproj.user +++ /dev/null @@ -1,7 +0,0 @@ - - - 8.0.50215 - ShowAllFiles - 0 - - \ No newline at end of file diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/CopyResourceNameCommand.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/CopyResourceNameCommand.cs index 112ccf5cb6..df8da1936b 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/CopyResourceNameCommand.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/CopyResourceNameCommand.cs @@ -2,8 +2,9 @@ // This code is distributed under the GNU LGPL (for details please see \doc\license.txt) using System; +using System.Windows.Forms; using ICSharpCode.Core; -using ICSharpCode.Core.WinForms; +using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; namespace ResourceEditor @@ -12,10 +13,10 @@ namespace ResourceEditor { public override void Run() { - ResourceEditorControl editor = ((ResourceEditWrapper)WorkbenchSingleton.Workbench.ActiveViewContent).ResourceEditor; + ResourceEditorControl editor = ((ResourceEditWrapper)SD.Workbench.ActiveViewContent).ResourceEditor; if(editor.ResourceList.SelectedItems.Count > 0) { - ClipboardWrapper.SetText(editor.ResourceList.SelectedItems[0].Text); + Clipboard.SetText(editor.ResourceList.SelectedItems[0].Text); } } } diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs index c26f53f39c..1b7e271225 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/DisplayDefinition.cs @@ -10,13 +10,15 @@ using ICSharpCode.Core; using ICSharpCode.Core.WinForms; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; +using ICSharpCode.SharpDevelop.WinForms; +using ICSharpCode.SharpDevelop.Workbench; namespace ResourceEditor { public class ResourceEditorDisplayBinding : IDisplayBinding { // IDisplayBinding interface - public bool CanCreateContentForFile(string fileName) + public bool CanCreateContentForFile(FileName fileName) { return true; // definition in .addin does extension-based filtering } @@ -26,12 +28,12 @@ namespace ResourceEditor return new ResourceEditWrapper(file); } - public bool IsPreferredBindingForFile(string fileName) + public bool IsPreferredBindingForFile(FileName fileName) { return true; } - public double AutoDetectFileContent(string fileName, Stream fileContent, string detectedMimeType) + public double AutoDetectFileContent(FileName fileName, Stream fileContent, string detectedMimeType) { return 1; } @@ -146,7 +148,7 @@ namespace ResourceEditor resourceEditor.ResourceList.Items.Remove(item); } resourceEditor.ResourceList.OnChanged(); - ClipboardWrapper.SetDataObject(tmphash); + SD.Clipboard.SetDataObject(tmphash); } public void Copy() @@ -160,7 +162,7 @@ namespace ResourceEditor object resourceValue = GetClonedResource(resourceEditor.ResourceList.Resources[item.Text].ResourceValue); tmphash.Add(item.Text, resourceValue); // copy a clone to clipboard } - ClipboardWrapper.SetDataObject(tmphash); + SD.Clipboard.SetDataObject(tmphash); } public void Paste() @@ -169,7 +171,7 @@ namespace ResourceEditor return; } - IDataObject dob = ClipboardWrapper.GetDataObject(); + IDataObject dob = Clipboard.GetDataObject(); if (dob == null) return; diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceCodeGeneratorTool.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceCodeGeneratorTool.cs index 0c1140abef..367ffb5685 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceCodeGeneratorTool.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceCodeGeneratorTool.cs @@ -8,6 +8,7 @@ using System.Resources.Tools; using System.IO; using ICSharpCode.Core; +using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Project; @@ -29,12 +30,17 @@ namespace ResourceEditor // Ensure that the generated code will not conflict with an // existing class. if (context.Project != null) { - IProjectContent pc = ParserService.GetProjectContent(context.Project); + ICompilation pc = SD.ParserService.GetCompilation(context.Project); if (pc != null) { - IClass existingClass = pc.GetClass(context.OutputNamespace + "." + StronglyTypedResourceBuilder.VerifyResourceName(Path.GetFileNameWithoutExtension(inputFilePath), pc.Language.CodeDomProvider), 0); + var codeDomProvider = context.Project.LanguageBinding.CodeDomProvider; + string resourceName = Path.GetFileNameWithoutExtension(inputFilePath); + if (codeDomProvider != null) { + resourceName = StronglyTypedResourceBuilder.VerifyResourceName(resourceName, codeDomProvider); + } + var existingClass = pc.FindType(new FullTypeName(context.OutputNamespace + "." + resourceName)).GetDefinition(); if (existingClass != null) { if (!IsGeneratedResourceClass(existingClass)) { - context.MessageView.AppendLine(String.Format(System.Globalization.CultureInfo.CurrentCulture, ResourceService.GetString("ResourceEditor.ResourceCodeGeneratorTool.ClassConflict"), inputFilePath, existingClass.FullyQualifiedName)); + context.MessageView.AppendLine(String.Format(System.Globalization.CultureInfo.CurrentCulture, ResourceService.GetString("ResourceEditor.ResourceCodeGeneratorTool.ClassConflict"), inputFilePath, existingClass.FullName)); return; } } @@ -66,7 +72,7 @@ namespace ResourceEditor Path.GetFileNameWithoutExtension(inputFilePath), // baseName generatedCodeNamespace, // generatedCodeNamespace context.OutputNamespace, // resourcesNamespace - context.Project.LanguageProperties.CodeDomProvider, // codeProvider + context.Project.LanguageBinding.CodeDomProvider, // codeProvider createInternalClass, // internal class out unmatchable )); @@ -80,20 +86,19 @@ namespace ResourceEditor /// Determines whether the specified class is a generated resource /// class, based on the attached attributes. /// - static bool IsGeneratedResourceClass(IClass @class) + static bool IsGeneratedResourceClass(ITypeDefinition type) { - IClass generatedCodeAttributeClass = @class.ProjectContent.GetClass("System.CodeDom.Compiler.GeneratedCodeAttribute", 0); - if (generatedCodeAttributeClass == null) { + var generatedCodeAttributeType = type.Compilation.FindType(typeof(System.CodeDom.Compiler.GeneratedCodeAttribute)); + if (generatedCodeAttributeType.Kind == TypeKind.Unknown) { LoggingService.Info("Could not find the class for 'System.CodeDom.Compiler.GeneratedCodeAttribute'."); return false; } - IReturnType generatedCodeAttribute = generatedCodeAttributeClass.DefaultReturnType; - foreach (IAttribute att in @class.Attributes) { - if (att.AttributeType.Equals(generatedCodeAttribute) && - att.PositionalArguments.Count == 2 && - String.Equals("System.Resources.Tools.StronglyTypedResourceBuilder", att.PositionalArguments[0] as string, StringComparison.Ordinal)) { - return true; + foreach (IAttribute att in type.Attributes) { + if (att.AttributeType.Equals(generatedCodeAttributeType) && att.PositionalArguments.Count == 2) { + var firstArg = att.PositionalArguments[0].ConstantValue as string; + if (string.Equals(typeof(StronglyTypedResourceBuilder).FullName, firstArg, StringComparison.Ordinal)) + return true; } } return false; diff --git a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs index 7c6d199542..2381741816 100644 --- a/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs +++ b/src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs @@ -129,7 +129,7 @@ namespace ResourceEditor } } - public void LoadFile(string filename, Stream stream) + public void LoadFile(FileName filename, Stream stream) { resources.Clear(); metadata.Clear(); @@ -168,7 +168,7 @@ namespace ResourceEditor InitializeListView(); } - public void SaveFile(string filename, Stream stream) + public void SaveFile(FileName filename, Stream stream) { switch (Path.GetExtension(filename).ToLowerInvariant()) { diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs index 1d44d917e3..ac1d41e147 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs @@ -36,5 +36,11 @@ namespace ICSharpCode.SharpDevelop return DefaultCodeGenerator.DefaultInstance; } } + + public virtual System.CodeDom.Compiler.CodeDomProvider CodeDomProvider { + get { + return null; + } + } } } diff --git a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs index b3f9bdb825..22260c36e8 100644 --- a/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs +++ b/src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs @@ -46,5 +46,13 @@ namespace ICSharpCode.SharpDevelop ICodeGenerator CodeGenerator { get; } + + /// + /// Provides access to the for this language. + /// Can be null, if not available. + /// + System.CodeDom.Compiler.CodeDomProvider CodeDomProvider { + get; + } } }