From 58d070bbf7630dac168a40c2d5b4dd2d59a39121 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Tue, 27 Feb 2007 16:43:15 +0000 Subject: [PATCH 01/11] Fixed SD2-1307: Code completion for NHibernate git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2408 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../ICSharpCode.SharpDevelop.Dom.csproj | 1 + .../Project/Src/CecilReader.cs | 6 +-- .../Src/ProjectContent/DomAssemblyName.cs | 39 +++++++++++++++++++ .../ProjectContent/ProjectContentRegistry.cs | 6 +++ .../ReflectionProjectContent.cs | 34 ++++++++++------ .../Src/ReflectionLayer/DomPersistence.cs | 8 ++-- 6 files changed, 75 insertions(+), 19 deletions(-) create mode 100644 src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj index c729757248..c3bf9f6e44 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/ICSharpCode.SharpDevelop.Dom.csproj @@ -88,6 +88,7 @@ + diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs index a299d4e047..e3b908de64 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs @@ -24,9 +24,9 @@ namespace ICSharpCode.SharpDevelop.Dom throw new ArgumentNullException("registry"); LoggingService.Info("Cecil: Load from " + fileName); AssemblyDefinition asm = AssemblyFactory.GetAssembly(fileName); - List referencedAssemblies = new List(); + List referencedAssemblies = new List(); foreach (AssemblyNameReference anr in asm.MainModule.AssemblyReferences) { - referencedAssemblies.Add(new AssemblyName(anr.FullName)); + referencedAssemblies.Add(new DomAssemblyName(anr.FullName)); } return new CecilProjectContent(asm.Name.FullName, fileName, referencedAssemblies.ToArray(), asm.MainModule.Types, registry); } @@ -121,7 +121,7 @@ namespace ICSharpCode.SharpDevelop.Dom private sealed class CecilProjectContent : ReflectionProjectContent { - public CecilProjectContent(string fullName, string fileName, AssemblyName[] referencedAssemblies, + public CecilProjectContent(string fullName, string fileName, DomAssemblyName[] referencedAssemblies, TypeDefinitionCollection types, ProjectContentRegistry registry) : base(fullName, fileName, referencedAssemblies, registry) { diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs new file mode 100644 index 0000000000..d1ddb78dea --- /dev/null +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DomAssemblyName.cs @@ -0,0 +1,39 @@ +// +// +// +// +// $Revision$ +// + +using System; + +namespace ICSharpCode.SharpDevelop.Dom +{ + /// + /// Similar to System.Reflection.AssemblyName, but does not raise an exception + /// on invalid assembly names. (See SD2-1307) + /// + public sealed class DomAssemblyName + { + readonly string fullAssemblyName; + + public DomAssemblyName(string fullAssemblyName) + { + this.fullAssemblyName = fullAssemblyName; + } + + public string FullName { + get { return fullAssemblyName; } + } + + internal static DomAssemblyName[] Convert(System.Reflection.AssemblyName[] names) + { + if (names == null) return null; + DomAssemblyName[] n = new DomAssemblyName[names.Length]; + for (int i = 0; i < names.Length; i++) { + n[i] = new DomAssemblyName(names[i].FullName); + } + return n; + } + } +} diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs index 0daa866b06..2e0ac70981 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ProjectContentRegistry.cs @@ -192,11 +192,17 @@ namespace ICSharpCode.SharpDevelop.Dom } } + [Obsolete("Use DomAssemblyName instead of AssemblyName")] public IProjectContent GetExistingProjectContent(AssemblyName assembly) { return GetExistingProjectContent(assembly.FullName, assembly.FullName); } + public IProjectContent GetExistingProjectContent(DomAssemblyName assembly) + { + return GetExistingProjectContent(assembly.FullName, assembly.FullName); + } + public virtual IProjectContent GetExistingProjectContent(string itemInclude, string itemFileName) { if (itemFileName == itemInclude) { diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs index 87d9b39fb9..661691f47d 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/ReflectionProjectContent.cs @@ -18,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom public class ReflectionProjectContent : DefaultProjectContent { string assemblyFullName; - AssemblyName[] referencedAssemblies; + DomAssemblyName[] referencedAssemblyNames; ICompilationUnit assemblyCompilationUnit; string assemblyLocation; ProjectContentRegistry registry; @@ -35,16 +35,20 @@ namespace ICSharpCode.SharpDevelop.Dom } } + [Obsolete("This property always returns an empty array! Use ReferencedAssemblyNames instead!")] public AssemblyName[] ReferencedAssemblies { - get { - return referencedAssemblies; - } + get { return new AssemblyName[0]; } + } + + /// + /// Gets the list of assembly names referenced by this project content. + /// + public IList ReferencedAssemblyNames { + get { return Array.AsReadOnly(referencedAssemblyNames); } } public ICompilationUnit AssemblyCompilationUnit { - get { - return assemblyCompilationUnit; - } + get { return assemblyCompilationUnit; } } DateTime assemblyFileLastWriteTime; @@ -73,7 +77,7 @@ namespace ICSharpCode.SharpDevelop.Dom } public ReflectionProjectContent(Assembly assembly, string assemblyLocation, ProjectContentRegistry registry) - : this(assembly.FullName, assemblyLocation, assembly.GetReferencedAssemblies(), registry) + : this(assembly.FullName, assemblyLocation, DomAssemblyName.Convert(assembly.GetReferencedAssemblies()), registry) { foreach (Type type in assembly.GetExportedTypes()) { string name = type.FullName; @@ -84,7 +88,13 @@ namespace ICSharpCode.SharpDevelop.Dom InitializeSpecialClasses(); } + [Obsolete("Use DomAssemblyName instead of AssemblyName!")] public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, AssemblyName[] referencedAssemblies, ProjectContentRegistry registry) + : this(assemblyFullName, assemblyLocation, DomAssemblyName.Convert(referencedAssemblies), registry) + { + } + + public ReflectionProjectContent(string assemblyFullName, string assemblyLocation, DomAssemblyName[] referencedAssemblies, ProjectContentRegistry registry) { if (assemblyFullName == null) throw new ArgumentNullException("assemblyFullName"); @@ -95,7 +105,7 @@ namespace ICSharpCode.SharpDevelop.Dom this.registry = registry; this.assemblyFullName = assemblyFullName; - this.referencedAssemblies = referencedAssemblies; + this.referencedAssemblyNames = referencedAssemblies; this.assemblyLocation = assemblyLocation; this.assemblyCompilationUnit = new DefaultCompilationUnit(this); @@ -146,7 +156,7 @@ namespace ICSharpCode.SharpDevelop.Dom } bool initialized = false; - List missingNames; + List missingNames; public void InitializeReferences() { @@ -169,7 +179,7 @@ namespace ICSharpCode.SharpDevelop.Dom } } else { initialized = true; - foreach (AssemblyName name in referencedAssemblies) { + foreach (DomAssemblyName name in referencedAssemblyNames) { IProjectContent content = registry.GetExistingProjectContent(name); if (content != null) { changed = true; @@ -178,7 +188,7 @@ namespace ICSharpCode.SharpDevelop.Dom } } else { if (missingNames == null) - missingNames = new List(); + missingNames = new List(); missingNames.Add(name); } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs index 87e3d0b471..f5c1aa44c6 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ReflectionLayer/DomPersistence.cs @@ -249,8 +249,8 @@ namespace ICSharpCode.SharpDevelop.Dom time = File.GetLastWriteTimeUtc(pc.AssemblyLocation).ToFileTime(); } catch {} writer.Write(time); - writer.Write(pc.ReferencedAssemblies.Length); - foreach (AssemblyName name in pc.ReferencedAssemblies) { + writer.Write(pc.ReferencedAssemblyNames.Count); + foreach (DomAssemblyName name in pc.ReferencedAssemblyNames) { writer.Write(name.FullName); } WriteClasses(); @@ -281,9 +281,9 @@ namespace ICSharpCode.SharpDevelop.Dom LoggingService.Warn("Read dom: assembly changed since cache was created"); return null; } - AssemblyName[] referencedAssemblies = new AssemblyName[reader.ReadInt32()]; + DomAssemblyName[] referencedAssemblies = new DomAssemblyName[reader.ReadInt32()]; for (int i = 0; i < referencedAssemblies.Length; i++) { - referencedAssemblies[i] = new AssemblyName(reader.ReadString()); + referencedAssemblies[i] = new DomAssemblyName(reader.ReadString()); } this.pc = new ReflectionProjectContent(assemblyName, assemblyLocation, referencedAssemblies, registry); if (ReadClasses()) { From 1918fab13c38e8920c8c5aef3acb3f672634f0f4 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 28 Feb 2007 16:57:20 +0000 Subject: [PATCH 02/11] Fixed lookup of type name in parent namespaces. (same problem as the already-fixed SD2-863, but in SearchType instead of SearchNamespace) git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2411 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- src/Main/Base/Test/NRefactoryResolverTests.cs | 18 ++++++++++++++++ src/Main/Base/Test/ReflectionLayerTests.cs | 2 +- .../ProjectContent/DefaultProjectContent.cs | 21 ++++++++++--------- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/Main/Base/Test/NRefactoryResolverTests.cs b/src/Main/Base/Test/NRefactoryResolverTests.cs index 516ed908e6..1f13bc7519 100644 --- a/src/Main/Base/Test/NRefactoryResolverTests.cs +++ b/src/Main/Base/Test/NRefactoryResolverTests.cs @@ -793,6 +793,24 @@ namespace A.B { TypeResolveResult trr = Resolve(program, "C.D", 7); Assert.AreEqual("A.B.C.D", trr.ResolvedClass.FullyQualifiedName, "trr.ResolvedClass.FullyQualifiedName"); } + + [Test] + public void ResolveTypeSD2_863() + { + string program = @"using System; +namespace A { class C {} } +namespace A.B { + class C {} + class TestClass { + void Test() { + + } + } +} +"; + TypeResolveResult trr = Resolve(program, "C", 7); + Assert.AreEqual("A.B.C", trr.ResolvedClass.FullyQualifiedName, "trr.ResolvedClass.FullyQualifiedName"); + } #endregion #region Import class tests diff --git a/src/Main/Base/Test/ReflectionLayerTests.cs b/src/Main/Base/Test/ReflectionLayerTests.cs index 19b049b2d0..533ad0782c 100644 --- a/src/Main/Base/Test/ReflectionLayerTests.cs +++ b/src/Main/Base/Test/ReflectionLayerTests.cs @@ -122,7 +122,7 @@ namespace ICSharpCode.SharpDevelop.Tests [Test] public void ReflectionParserTest() { - ICompilationUnit cu = new ReflectionProjectContent("TestName", "testlocation", new AssemblyName[0], ParserService.DefaultProjectContentRegistry).AssemblyCompilationUnit; + ICompilationUnit cu = new ReflectionProjectContent("TestName", "testlocation", new DomAssemblyName[0], ParserService.DefaultProjectContentRegistry).AssemblyCompilationUnit; IClass c = new ReflectionClass(cu, typeof(TestClass<,>), typeof(TestClass<,>).FullName, null); cu.ProjectContent.AddClassToNamespaceList(c); diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs index 1126b346c8..0526da5892 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/ProjectContent/DefaultProjectContent.cs @@ -783,23 +783,24 @@ namespace ICSharpCode.SharpDevelop.Dom SearchTypeResult fallbackResult = SearchTypeResult.Empty; if (request.CurrentType != null) { // Try parent namespaces of the current class - string fullname = request.CurrentType.FullyQualifiedName; - string[] namespaces = fullname.Split('.'); - StringBuilder curnamespace = new StringBuilder(); - for (int i = 0; i < namespaces.Length; ++i) { - curnamespace.Append(namespaces[i]); - curnamespace.Append('.'); + string fullname = request.CurrentType.Namespace; + while (fullname != null && fullname.Length > 0) { + string nameSpace = fullname + '.' + name; - curnamespace.Append(name); - c = GetClass(curnamespace.ToString(), request.TypeParameterCount); + c = GetClass(nameSpace, request.TypeParameterCount); if (c != null) { if (c.TypeParameters.Count == request.TypeParameterCount) return new SearchTypeResult(c.DefaultReturnType); else fallbackResult = new SearchTypeResult(c.DefaultReturnType); } - // remove class name again to try next namespace - curnamespace.Length -= name.Length; + + int pos = fullname.LastIndexOf('.'); + if (pos < 0) { + fullname = null; + } else { + fullname = fullname.Substring(0, pos); + } } if (name.IndexOf('.') < 0) { From e59709ea88a45343ff967ace6a95563b13928c63 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 28 Feb 2007 17:15:32 +0000 Subject: [PATCH 03/11] Remove Debugger.BooInterpreter from setup - we won't ship it with SharpDevelop 2.1 because it is unfinished (e.g. trying to get the values of local variables doesn't work yet). git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2412 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- src/Setup/Files.wxs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Setup/Files.wxs b/src/Setup/Files.wxs index d001162e5c..24748a1927 100644 --- a/src/Setup/Files.wxs +++ b/src/Setup/Files.wxs @@ -1003,8 +1003,6 @@ - - From 51e43f4b74da4dc3fbca0b12d145962a4438ea8f Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 3 Mar 2007 15:44:40 +0000 Subject: [PATCH 04/11] Support loading multi-file assemblies. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2416 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/CecilReader.cs | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs index e3b908de64..1a4b477240 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/CecilReader.cs @@ -25,10 +25,12 @@ namespace ICSharpCode.SharpDevelop.Dom LoggingService.Info("Cecil: Load from " + fileName); AssemblyDefinition asm = AssemblyFactory.GetAssembly(fileName); List referencedAssemblies = new List(); - foreach (AssemblyNameReference anr in asm.MainModule.AssemblyReferences) { - referencedAssemblies.Add(new DomAssemblyName(anr.FullName)); + foreach (ModuleDefinition module in asm.Modules) { + foreach (AssemblyNameReference anr in module.AssemblyReferences) { + referencedAssemblies.Add(new DomAssemblyName(anr.FullName)); + } } - return new CecilProjectContent(asm.Name.FullName, fileName, referencedAssemblies.ToArray(), asm.MainModule.Types, registry); + return new CecilProjectContent(asm.Name.FullName, fileName, referencedAssemblies.ToArray(), asm, registry); } static void AddAttributes(IProjectContent pc, IList list, CustomAttributeCollection attributes) @@ -122,8 +124,16 @@ namespace ICSharpCode.SharpDevelop.Dom private sealed class CecilProjectContent : ReflectionProjectContent { public CecilProjectContent(string fullName, string fileName, DomAssemblyName[] referencedAssemblies, - TypeDefinitionCollection types, ProjectContentRegistry registry) + AssemblyDefinition assembly, ProjectContentRegistry registry) : base(fullName, fileName, referencedAssemblies, registry) + { + foreach (ModuleDefinition module in assembly.Modules) { + AddTypes(module.Types); + } + InitializeSpecialClasses(); + } + + void AddTypes(TypeDefinitionCollection types) { foreach (TypeDefinition td in types) { if ((td.Attributes & TypeAttributes.Public) == TypeAttributes.Public) { @@ -141,7 +151,6 @@ namespace ICSharpCode.SharpDevelop.Dom AddClassToNamespaceListInternal(new CecilClass(this.AssemblyCompilationUnit, null, td, name)); } } - InitializeSpecialClasses(); } } From 15da21072b907bb9c3c3e7bb55e3bd58f9103f7b Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sun, 4 Mar 2007 08:46:17 +0000 Subject: [PATCH 05/11] Fixed forum-15559: C# lexer reports error on identifiers like @_ABC git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2419 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/Lexer/CSharp/Lexer.cs | 2 +- .../Test/Lexer/CSharp/CustomLexerTests.cs | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs b/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs index 1f59febb21..9ee7a6b8f8 100644 --- a/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs +++ b/src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs @@ -79,7 +79,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp ch = (char)next; if (ch == '"') { token = ReadVerbatimString(); - } else if (Char.IsLetterOrDigit(ch)) { + } else if (Char.IsLetterOrDigit(ch) || ch == '_') { token = new Token(Tokens.Identifier, x - 1, y, ReadIdent(ch)); } else { errors.Error(y, x, String.Format("Unexpected char in Lexer.Next() : {0}", ch)); diff --git a/src/Libraries/NRefactory/Test/Lexer/CSharp/CustomLexerTests.cs b/src/Libraries/NRefactory/Test/Lexer/CSharp/CustomLexerTests.cs index 386a45dc83..f5864e2db5 100644 --- a/src/Libraries/NRefactory/Test/Lexer/CSharp/CustomLexerTests.cs +++ b/src/Libraries/NRefactory/Test/Lexer/CSharp/CustomLexerTests.cs @@ -41,6 +41,34 @@ namespace ICSharpCode.NRefactory.Tests.Lexer.CSharp Assert.AreEqual("a_Bc05", t.val); } + [Test] + public void TestIdentifierStartingWithUnderscore() + { + ILexer lexer = GenerateLexer(new StringReader("_Bc05")); + Token t = lexer.NextToken(); + Assert.AreEqual(Tokens.Identifier, t.kind); + Assert.AreEqual("_Bc05", t.val); + } + + [Test] + public void TestKeyWordAsIdentifier() + { + ILexer lexer = GenerateLexer(new StringReader("@int")); + Token t = lexer.NextToken(); + Assert.AreEqual(Tokens.Identifier, t.kind); + Assert.AreEqual("int", t.val); + } + + + [Test] + public void TestKeyWordAsIdentifierStartingWithUnderscore() + { + ILexer lexer = GenerateLexer(new StringReader("@_int")); + Token t = lexer.NextToken(); + Assert.AreEqual(Tokens.Identifier, t.kind); + Assert.AreEqual("_int", t.val); + } + [Test] public void TestSkippedEmptyBlock() { From b1b3e9dec3a806387eeee0a32f37098ca6826d99 Mon Sep 17 00:00:00 2001 From: Christoph Wille Date: Sun, 4 Mar 2007 13:26:26 +0000 Subject: [PATCH 06/11] SDR updated to revision 120, v2.1 RTM git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2422 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../ICSharpCode.ReportDesigner.addin | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/AddIns/SharpDevelopReports/ICSharpCode.ReportDesigner.addin b/AddIns/SharpDevelopReports/ICSharpCode.ReportDesigner.addin index e7d6ab303c..a8543907c9 100644 --- a/AddIns/SharpDevelopReports/ICSharpCode.ReportDesigner.addin +++ b/AddIns/SharpDevelopReports/ICSharpCode.ReportDesigner.addin @@ -45,28 +45,28 @@ - + - + + class="ICSharpCode.Reports.Addin.Commands.ClearNodesCommand"/> + class="ICSharpCode.Reports.Addin.Commands.RemoveNodeCommand"/> + class="ICSharpCode.Reports.Addin.Commands.ToogleOrderCommand"/> @@ -76,7 +76,7 @@ label = "${res:SharpReport.ReportGenerator}" shortcut = "Control|Alt|R" - class = "ICSharpCode.Reports.Addin.Commands.StartReportView"/> + class = "ICSharpCode.Reports.Addin.Commands.StartViewCommand"/> @@ -91,8 +91,8 @@ - - + + From 2ec6b50c05d1b1bb287300dd8767bc85f7f0af49 Mon Sep 17 00:00:00 2001 From: Justin Dearing Date: Tue, 6 Mar 2007 04:24:58 +0000 Subject: [PATCH 07/11] Added Apache 2.0 License git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2426 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- data/options/TextLib/Licenses.xml | 202 ++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) diff --git a/data/options/TextLib/Licenses.xml b/data/options/TextLib/Licenses.xml index 91b985b1bc..b2f869517f 100644 --- a/data/options/TextLib/Licenses.xml +++ b/data/options/TextLib/Licenses.xml @@ -1,4 +1,206 @@ + Date: Thu, 8 Mar 2007 15:25:58 +0000 Subject: [PATCH 10/11] Remove [STAThread] from C# compact framework project template. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2431 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- data/templates/project/CSharp/CompactFormsProject.xpt | 1 - 1 file changed, 1 deletion(-) diff --git a/data/templates/project/CSharp/CompactFormsProject.xpt b/data/templates/project/CSharp/CompactFormsProject.xpt index 63c4e98c6a..d76e28a792 100644 --- a/data/templates/project/CSharp/CompactFormsProject.xpt +++ b/data/templates/project/CSharp/CompactFormsProject.xpt @@ -52,7 +52,6 @@ namespace ${StandardNamespace} /// public partial class MainForm : Form { - [STAThread] public static void Main(string[] args) { Application.Run(new MainForm()); From cea87a1bccd743e48895ba9e1c6bd9181122972e Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 8 Mar 2007 18:56:10 +0000 Subject: [PATCH 11/11] Fixed SD2-1329: Index was out of range when cutting text. Replace DoEvents() with a timer to make waiting for the second clipboard set operation non-blocking. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.1@2432 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Gui/TextAreaClipboardHandler.cs | 37 ++++++++++++++----- .../Core/Project/Src/Util/ClipboardWrapper.cs | 29 ++++++++++++--- 2 files changed, 51 insertions(+), 15 deletions(-) diff --git a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaClipboardHandler.cs b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaClipboardHandler.cs index a50343b228..8cec01ec0a 100644 --- a/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaClipboardHandler.cs +++ b/src/Libraries/ICSharpCode.TextEditor/Project/Src/Gui/TextAreaClipboardHandler.cs @@ -88,21 +88,38 @@ namespace ICSharpCode.TextEditor } OnCopyText(new CopyTextEventArgs(stringToCopy)); - // Work around ExternalException bug. (SD2-426) - // Best reproducable inside Virtual PC. - try { - Clipboard.SetDataObject(dataObject, true, 10, 50); - } catch (ExternalException) { - Application.DoEvents(); - try { - Clipboard.SetDataObject(dataObject, true, 10, 50); - } catch (ExternalException) {} - } + SafeSetClipboard(dataObject); return true; } else { return false; } } + + // Code duplication: TextAreaClipboardHandler.cs also has SafeSetClipboard + [ThreadStatic] static int SafeSetClipboardDataVersion; + + static void SafeSetClipboard(object dataObject) + { + // Work around ExternalException bug. (SD2-426) + // Best reproducable inside Virtual PC. + int version = unchecked(++SafeSetClipboardDataVersion); + try { + Clipboard.SetDataObject(dataObject, true); + } catch (ExternalException) { + Timer timer = new Timer(); + timer.Interval = 100; + timer.Tick += delegate { + timer.Stop(); + timer.Dispose(); + if (SafeSetClipboardDataVersion == version) { + try { + Clipboard.SetDataObject(dataObject, true, 10, 50); + } catch (ExternalException) { } + } + }; + timer.Start(); + } + } bool CopyTextToClipboard(string stringToCopy) { diff --git a/src/Main/Core/Project/Src/Util/ClipboardWrapper.cs b/src/Main/Core/Project/Src/Util/ClipboardWrapper.cs index f7c5d1422b..3d7d2acbc9 100644 --- a/src/Main/Core/Project/Src/Util/ClipboardWrapper.cs +++ b/src/Main/Core/Project/Src/Util/ClipboardWrapper.cs @@ -60,13 +60,32 @@ namespace ICSharpCode.Core public static void SetDataObject(object data) { + SafeSetClipboard(data); + } + + // Code duplication: TextAreaClipboardHandler.cs also has SafeSetClipboard + [ThreadStatic] static int SafeSetClipboardDataVersion; + + static void SafeSetClipboard(object dataObject) + { + // Work around ExternalException bug. (SD2-426) + // Best reproducable inside Virtual PC. + int version = unchecked(++SafeSetClipboardDataVersion); try { - Clipboard.SetDataObject(data, true, 10, 50); + Clipboard.SetDataObject(dataObject, true); } catch (ExternalException) { - Application.DoEvents(); - try { - Clipboard.SetDataObject(data, true, 10, 50); - } catch (ExternalException) { } + Timer timer = new Timer(); + timer.Interval = 100; + timer.Tick += delegate { + timer.Stop(); + timer.Dispose(); + if (SafeSetClipboardDataVersion == version) { + try { + Clipboard.SetDataObject(dataObject, true, 10, 50); + } catch (ExternalException) { } + } + }; + timer.Start(); } } }