From e8c9d5e35cfdc1aaa133d0e6b2f744ce3b8cdab8 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Fri, 5 May 2006 15:56:39 +0000 Subject: [PATCH] RefactoringService now accepts any ResolveResult. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/2.0@1387 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/ConvertVisitorExpressions.cs | 8 +++-- .../Project/NRefactoryToBooConverter.csproj | 10 +++++-- .../Test/MemberTests.cs | 30 +++++++++++++++++++ .../Test/TestHelper.cs | 5 ++++ .../RefactoringService/RefactoringService.cs | 26 ++++++++++++++++ 5 files changed, 75 insertions(+), 4 deletions(-) diff --git a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs index 2d72123800..5a3f73f267 100644 --- a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs +++ b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/ConvertVisitorExpressions.cs @@ -117,6 +117,10 @@ namespace NRefactoryToBooConverter if (val is double) { return new B.DoubleLiteralExpression(GetLexicalInfo(pe), (double)val, false); } + if (val is decimal) { + AddWarning(pe, "Converting decimal literal to double literal"); + return new B.DoubleLiteralExpression(GetLexicalInfo(pe), (double)(decimal)val); + } AddError(pe, "Unknown primitive literal of type " + val.GetType().FullName); return null; } @@ -520,14 +524,14 @@ namespace NRefactoryToBooConverter { AddError(checkedExpression, "Using 'checked' inside an expression is not supported by boo, " + "use the checked {} block instead."); - return null; + return MakeMethodCall("checked", ConvertExpression(checkedExpression.Expression)); } public object Visit(UncheckedExpression uncheckedExpression, object data) { AddError(uncheckedExpression, "Using 'unchecked' inside an expression is not supported by boo, " + "use the unchecked {} block instead."); - return null; + return MakeMethodCall("unchecked", ConvertExpression(uncheckedExpression.Expression)); } } } diff --git a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/NRefactoryToBooConverter.csproj b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/NRefactoryToBooConverter.csproj index 4233cf143d..0e17b41a95 100644 --- a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/NRefactoryToBooConverter.csproj +++ b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Project/NRefactoryToBooConverter.csproj @@ -9,7 +9,6 @@ False False False - None False Auto 105906176 @@ -17,7 +16,6 @@ 4096 4 false - false bin\Debug\ @@ -29,6 +27,14 @@ true TRACE + + Full + true + + + None + false + diff --git a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Test/MemberTests.cs b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Test/MemberTests.cs index 3d1106486c..30d8e0834e 100644 --- a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Test/MemberTests.cs +++ b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Test/MemberTests.cs @@ -134,6 +134,18 @@ namespace NRefactoryToBooConverter.Tests TestInClass("public static void Run() {}", "public static def Run() as System.Void:\n\tpass"); } + [Test] + public void AbstractMethod() + { + TestInClass("public abstract void Run();", "public abstract def Run() as System.Void:\n\tpass"); + } + + [Test] + public void AbstractMethodInInterface() + { + TestInInterface("void Run();", "def Run() as System.Void"); + } + [Test] public void StaticMethodInStaticClass() { @@ -214,6 +226,18 @@ namespace NRefactoryToBooConverter.Tests "[AA]\npublic Text as System.String:\n\t[BB]\n\tget:\n\t\tpass\n\t[CC]\n\tset:\n\t\tpass"); } + [Test] + public void AbstractProperty() + { + TestInClass("public abstract string Prop { get; }", "public abstract Prop as System.String:\n\tget:\n\t\tpass"); + } + + [Test] + public void AbstractPropertyInInterface() + { + TestInInterface("string Prop { get; }", "Prop as System.String:\n\tget"); + } + [Test] public void ReadOnlyIndexer() { @@ -251,6 +275,12 @@ namespace NRefactoryToBooConverter.Tests TestInClass("[LookHere] event EventHandler Closed;", "[LookHere]\nprivate event Closed as EventHandler"); } + [Test] + public void EventInInterface() + { + TestInInterface("event EventHandler Closed;", "event Closed as EventHandler"); + } + [Test] public void PInvoke() { diff --git a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Test/TestHelper.cs b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Test/TestHelper.cs index 652bd915ab..3835c0c4a3 100644 --- a/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Test/TestHelper.cs +++ b/src/AddIns/BackendBindings/Boo/NRefactoryToBooConverter/Test/TestHelper.cs @@ -65,6 +65,11 @@ namespace NRefactoryToBooConverter.Tests Assert.AreEqual(output.Replace("??", ConverterSettings.DefaultNameGenerationPrefix), ConvertVB(input)); } + protected void TestInInterface(string input, string output) + { + Test("public interface ClassName {\n" + input + "\n}", "public interface ClassName:\n\t" + output.Replace("\n", "\n\t")); + } + protected void TestInClass(string input, string output) { Test("public class ClassName {\n" + input + "\n}", "public class ClassName:\n\t" + output.Replace("\n", "\n\t")); diff --git a/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs b/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs index 9392dc5e26..f36310962f 100644 --- a/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs +++ b/src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs @@ -86,9 +86,35 @@ namespace ICSharpCode.SharpDevelop.Refactoring /// public static List FindReferences(IClass @class, IProgressMonitor progressMonitor) { + if (@class == null) + throw new ArgumentNullException("class"); return RunFindReferences(@class, null, false, progressMonitor); } + /// + /// Find all references to the resolved entity. + /// + public static List FindReferences(ResolveResult entity, IProgressMonitor progressMonitor) + { + if (entity == null) + throw new ArgumentNullException("entity"); + if (entity is LocalResolveResult) { + return RunFindReferences(entity.CallingClass, (entity as LocalResolveResult).Field, true, progressMonitor); + } else if (entity is TypeResolveResult) { + return FindReferences((entity as TypeResolveResult).ResolvedClass, progressMonitor); + } else if (entity is MemberResolveResult) { + return FindReferences((entity as MemberResolveResult).ResolvedMember, progressMonitor); + } else if (entity is MethodResolveResult) { + IMethod method = (entity as MethodResolveResult).GetMethodIfSingleOverload(); + if (method != null) { + return FindReferences(method, progressMonitor); + } + } else if (entity is MixedResolveResult) { + return FindReferences((entity as MixedResolveResult).PrimaryResult, progressMonitor); + } + return null; + } + /// /// Find all references to the specified local variable. ///