using CodePlay.Core.Interfaces; using CodePlay.Core.Models; using System.Text; using CodePlay.Core.Common; namespace CodePlay.Core.Converters; /// /// Java 到 C++ 转换器 /// public class JavaToCppConverter : IConverter { public async Task ConvertAsync( Interfaces.SyntaxTree syntaxTree, LanguageType targetLanguage, ConversionOptions? options = null, CancellationToken cancellationToken = default) { var result = new ConversionResult { Success = false, Warnings = new List(), Report = new ConversionReport() }; if (targetLanguage != LanguageType.CPlusPlus) { result.ErrorMessage = "This converter only supports Java to C++ conversion"; return result; } try { var cppCode = ConvertToCpp(syntaxTree, result.Report, options); result.Success = true; result.TransformedCode = cppCode; result.Report.ClassesConverted = 1; } catch (Exception ex) { result.Success = false; result.ErrorMessage = ex.Message; } return await Task.FromResult(result); } private string ConvertToCpp(Interfaces.SyntaxTree parsed, ConversionReport report, ConversionOptions? options) { var sb = new StringBuilder(); sb.AppendLine("#include "); sb.AppendLine("#include "); sb.AppendLine("#include "); sb.AppendLine("#include "); sb.AppendLine(); ExtractAndConvertClasses(parsed.Root, sb, report); return sb.ToString(); } private void ExtractAndConvertClasses(SyntaxNode node, StringBuilder sb, ConversionReport report) { if (node.Type == SyntaxNodeType.Class) { var className = node.Metadata.TryGetValue("Name", out var name) ? name?.ToString() ?? "Unknown" : "Unknown"; sb.AppendLine($"class {className} {{"); sb.AppendLine("public:"); sb.AppendLine($" {className}() {{}}"); sb.AppendLine("};"); sb.AppendLine(); report.ClassesConverted++; } foreach (var child in node.Children) { ExtractAndConvertClasses(child, sb, report); } } }