diff --git a/JavaToCSharp.Tests/ConvertExpressionTests.cs b/JavaToCSharp.Tests/ConvertExpressionTests.cs index 1c7098b..0c5850b 100644 --- a/JavaToCSharp.Tests/ConvertExpressionTests.cs +++ b/JavaToCSharp.Tests/ConvertExpressionTests.cs @@ -12,6 +12,8 @@ public class ConvertExpressionTests [InlineData("lst.set(i, value)", "lst[i] = value")] [InlineData("str.length()", "str.Length")] [InlineData("arr.length", "arr.Length")] + [InlineData("e.getMessage()", "e.Message")] + [InlineData("obj.getMessage(i)", "obj.GetMessage(i)")] //Conversion not done if param number does not match the required [InlineData("obj.size(i)", "obj.Size(i)")] diff --git a/JavaToCSharp.Tests/IntegrationTests.cs b/JavaToCSharp.Tests/IntegrationTests.cs index 9b6eb34..01ef0de 100644 --- a/JavaToCSharp.Tests/IntegrationTests.cs +++ b/JavaToCSharp.Tests/IntegrationTests.cs @@ -88,6 +88,7 @@ public void GeneralUnsuccessfulConversionTest(string filePath) [InlineData("Resources/InstanceInitializers.java")] [InlineData("Resources/StaticImports.java")] [InlineData("Resources/LabeledBreakContinue.java")] + [InlineData("Resources/ExceptionGetMessage.java")] public void FullIntegrationTests(string filePath, bool allowWarnings = false) => RunFullIntegrationTest(filePath, allowWarnings); diff --git a/JavaToCSharp.Tests/Resources/ExceptionGetMessage.java b/JavaToCSharp.Tests/Resources/ExceptionGetMessage.java new file mode 100644 index 0000000..39eeacd --- /dev/null +++ b/JavaToCSharp.Tests/Resources/ExceptionGetMessage.java @@ -0,0 +1,13 @@ +/// Expect: +/// - output: "caught: boom\n" +package example; + +public class Program { + public static void main(String[] args) { + try { + throw new IllegalArgumentException("boom"); + } catch (IllegalArgumentException e) { + System.out.println("caught: " + e.getMessage()); + } + } +} diff --git a/JavaToCSharp/TypeHelper.cs b/JavaToCSharp/TypeHelper.cs index 49ca3be..bcaafcf 100644 --- a/JavaToCSharp/TypeHelper.cs +++ b/JavaToCSharp/TypeHelper.cs @@ -273,6 +273,13 @@ public static bool TryTransformMethodCall(ConversionContext context, MethodCallE return true; } + case "getMessage" when args.size() == 0: + { + var scopeSyntaxMessage = ExpressionVisitor.VisitExpression(context, scope); + transformedSyntax = ReplaceMethodByProperty(scopeSyntaxMessage, "Message"); + return true; + } + case "get" when args.size() == 1: { var scopeSyntaxGet = ExpressionVisitor.VisitExpression(context, scope);