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.
///