80b4718568
创建以下文档: - INDEX.md - 项目索引和概览 - ARCHITECTURE.md - 系统架构设计文档 - INTERFACES.md - 接口和类型定义文档 - DEVELOPER_GUIDE.md - 开发者指南 文档覆盖内容: - 项目结构和模块说明 - 技术栈和依赖 - 核心组件设计 - API 接口定义 - 数据模型 - 开发环境配置 - 代码规范 - 测试指南 - 调试技巧 - Git 工作流 Co-authored-by: monkeycode-ai <monkeycode-ai@chaitin.com>
13 KiB
13 KiB
CodePlay 接口和类型定义
命名空间概览
CodePlay.Core.Common
包含公共枚举类型。
CodePlay.Core.Models
包含数据模型类。
CodePlay.Core.Interfaces
包含核心接口定义。
枚举类型
LanguageType
定义支持的编程语言。
public enum LanguageType
{
None = 0, // 未指定
CSharp = 1, // C#
Java = 2, // Java
CPlusPlus = 3 // C++
}
ConversionStatus
定义转换任务的状态。
public enum ConversionStatus
{
Pending = 0, // 等待中
InProgress = 1, // 进行中
Completed = 2, // 已完成
PartiallyCompleted = 3, // 部分完成(需要人工检查)
Failed = 4, // 失败
Cancelled = 5 // 已取消
}
ProjectStatus
定义项目的状态。
public enum ProjectStatus
{
InProgress = 0, // 进行中
Completed = 1, // 已完成
Verified = 2, // 已验证
Archived = 3 // 已归档
}
ValidationResult
定义验证结果的状态。
public enum ValidationResult
{
NotValidated = 0, // 未验证
Passed = 1, // 验证通过
Failed_NeedsManualReview = 2, // 验证失败 - 需要人工检查
Failed_CompilationError = 3, // 验证失败 - 编译错误
Failed_TestFailed = 4 // 验证失败 - 测试失败
}
SyntaxNodeType
定义语法节点的类型。
public enum SyntaxNodeType
{
Unknown = 0,
CompilationUnit = 1, // 编译单元
Namespace = 2, // 命名空间
Class = 3, // 类
Interface = 4, // 接口
Method = 5, // 方法
Property = 6, // 属性
Field = 7, // 字段
Constructor = 8, // 构造函数
Statement = 9, // 语句
Expression = 10, // 表达式
Type = 11, // 类型
Parameter = 12, // 参数
Comment = 13, // 注释
DocumentationComment = 14 // 文档注释
}
CommentType
定义注释的类型。
public enum CommentType
{
SingleLine = 0, // 单行注释 //
MultiLine = 1, // 多行注释 /* */
XmlDoc = 2, // XML 文档注释 ///
JavaDoc = 3, // JavaDoc /** */
Doxygen = 4 // Doxygen /// 或 /** */
}
DocFormat
定义文档格式。
public enum DocFormat
{
XmlDoc = 0, // C# XML Doc
JavaDoc = 1, // Java JavaDoc
Doxygen = 2 // C++ Doxygen
}
IssueType
定义转换问题的类型。
public enum IssueType
{
UnconvertibleSyntax = 0, // 不可转换语法
TypeMappingWarning = 1, // 类型映射警告
ApiDifference = 2, // API 差异
SemanticDifference = 3, // 语义差异
PerformanceConsideration = 4 // 性能考虑
}
LogLevel
定义日志级别。
public enum LogLevel
{
Info = 0,
Warning = 1,
Error = 2,
Debug = 3
}
核心模型类
ConversionRequest
转换请求模型。
public class ConversionRequest
{
public string SourceCode { get; set; }
public LanguageType SourceLanguage { get; set; }
public LanguageType TargetLanguage { get; set; }
public string? ProjectId { get; set; }
public int ValidationRounds { get; set; } = 2;
public ConversionOptions? Options { get; set; }
}
ConversionOptions
转换配置选项。
public class ConversionOptions
{
public bool KeepComments { get; set; } = true;
public bool KeepDocStrings { get; set; } = true;
public bool KeepFormatting { get; set; } = true;
public int IndentSize { get; set; } = 4;
public bool UseTabs { get; set; } = false;
public bool EnableAutoFix { get; set; } = true;
}
ConversionResult
转换结果模型。
public class ConversionResult
{
public bool Success { get; set; }
public string TransformedCode { get; set; }
public ConversionReport? Report { get; set; }
public List<ConversionWarning> Warnings { get; set; }
public ValidationSummary? ValidationSummary { get; set; }
public string? ErrorMessage { get; set; }
}
ConversionReport
转换报告。
public class ConversionReport
{
public int LinesConverted { get; set; }
public int ClassesConverted { get; set; }
public int MethodsConverted { get; set; }
public TimeSpan Duration { get; set; }
public List<ConversionIssue> Issues { get; set; }
public List<TransformationLog> TransformationLog { get; set; }
public List<TodoItem> TodoItems { get; set; }
}
ConversionWarning
转换警告。
public class ConversionWarning
{
public string Code { get; set; }
public string Message { get; set; }
public int LineNumber { get; set; }
public int ColumnNumber { get; set; }
public string? Suggestion { get; set; }
}
ValidationSummary
验证摘要。
public class ValidationSummary
{
public bool Passed { get; set; }
public int RoundsExecuted { get; set; }
public bool NeedsManualReview { get; set; }
public List<CompilationError> CompilationErrors { get; set; }
public List<string> ValidationLog { get; set; }
}
ConversionIssue
转换问题。
public class ConversionIssue
{
public IssueType Type { get; set; }
public string Description { get; set; }
public int LineNumber { get; set; }
public string? OriginalCode { get; set; }
public string? Suggestion { get; set; }
}
TransformationLog
转换日志。
public class TransformationLog
{
public DateTime Timestamp { get; set; }
public string Operation { get; set; }
public string Details { get; set; }
public LogLevel Level { get; set; }
}
TodoItem
TODO 项(用于不可转换的语法)。
public class TodoItem
{
public string Description { get; set; }
public int LineNumber { get; set; }
public string OriginalSyntax { get; set; }
public string WhyNotDirect { get; set; }
public string RecommendedAlternative { get; set; }
public string? ReferenceLocation { get; set; }
}
CompilationError
编译错误。
public class CompilationError
{
public string ErrorId { get; set; }
public string Message { get; set; }
public int LineNumber { get; set; }
public int ColumnNumber { get; set; }
public bool IsError { get; set; } = true;
}
Project
项目模型。
public class Project
{
public string Id { get; set; } = Guid.NewGuid().ToString("N");
public string Name { get; set; }
public LanguageType SourceLanguage { get; set; }
public LanguageType TargetLanguage { get; set; }
public ProjectStatus Status { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public List<ConversionTask> Tasks { get; set; }
public ProjectConfiguration? Configuration { get; set; }
}
ConversionTask
转换任务。
public class ConversionTask
{
public string Id { get; set; } = Guid.NewGuid().ToString("N");
public string SourceFilePath { get; set; }
public string TargetFilePath { get; set; }
public string? SourceCode { get; set; }
public string? TransformedCode { get; set; }
public ConversionStatus Status { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? CompletedAt { get; set; }
public ConversionResult? Result { get; set; }
}
ProjectConfiguration
项目配置。
public class ProjectConfiguration
{
public int ValidationRounds { get; set; } = 2;
public bool EnableAutoFix { get; set; } = true;
public bool KeepComments { get; set; } = true;
public bool KeepDocStrings { get; set; } = true;
public int IndentSize { get; set; } = 4;
public string? OutputDirectory { get; set; }
}
语法树模型
SyntaxTree
语法树模型。
public class SyntaxTree
{
public LanguageType Language { get; set; }
public SyntaxNode Root { get; set; }
public string? SourceFilePath { get; set; }
public string? SourceCode { get; set; }
public List<SyntaxComment> Comments { get; set; }
public List<SyntaxDocumentation> Documentation { get; set; }
}
SyntaxNode
语法节点。
public class SyntaxNode
{
public SyntaxNodeType Type { get; set; }
public string Text { get; set; }
public List<SyntaxNode> Children { get; set; }
public Dictionary<string, object?> Metadata { get; set; }
public SyntaxNode? Parent { get; set; }
public bool IsUnconvertible { get; set; }
public string? TodoDescription { get; set; }
}
SyntaxComment
语法注释。
public class SyntaxComment
{
public CommentType Type { get; set; }
public string Text { get; set; }
public int LineNumber { get; set; }
}
SyntaxDocumentation
语法文档。
public class SyntaxDocumentation
{
public string ElementName { get; set; }
public string Content { get; set; }
public DocFormat Format { get; set; }
}
核心接口
IParser
语言解析器接口。
public interface IParser
{
Task<SyntaxTree> ParseAsync(string sourceCode, CancellationToken cancellationToken = default);
}
实现:
BaseParser- 抽象基类CSharpParser- C# 解析器
IConverter
代码转换器接口。
public interface IConverter
{
Task<ConversionResult> ConvertAsync(
SyntaxTree syntaxTree,
LanguageType targetLanguage,
ConversionOptions? options = null,
CancellationToken cancellationToken = default);
}
实现:
CSharpToJavaConverter- C# → Java 转换器
ICodeGenerator
代码生成器接口。
public interface ICodeGenerator
{
string Generate(SyntaxTree syntaxTree);
}
实现:
JavaCodeGenerator- Java 代码生成器
IConversionStrategy
转换策略接口。
public interface IConversionStrategy
{
LanguageType SourceLanguage { get; }
LanguageType TargetLanguage { get; }
SyntaxNode ConvertNode(SyntaxNode node, ConversionContext context);
string MapType(string sourceType);
}
实现:
CSharpToJavaStrategy- C# → Java 转换策略
ICompilerValidator
编译验证器接口。
public interface ICompilerValidator
{
Task<ValidationResult> ValidateAsync(string code, LanguageType language, CancellationToken cancellationToken = default);
}
IAutoFixEngine
自动修复引擎接口。
public interface IAutoFixEngine
{
Task<FixResult> FixAsync(string code, List<CompilationError> errors, int round, CancellationToken cancellationToken = default);
}
辅助类
TypeMapping
类型映射。
public class TypeMapping
{
public string SourceType { get; set; }
public string TargetType { get; set; }
}
ConversionContext
转换上下文。
public class ConversionContext
{
public LanguageType SourceLanguage { get; set; }
public LanguageType TargetLanguage { get; set; }
public ConversionOptions? Options { get; set; }
public List<ConversionIssue> Issues { get; set; }
public List<TodoItem> TodoItems { get; set; }
public List<TransformationLog> Logs { get; set; }
}
FixResult
修复结果。
public class FixResult
{
public bool CanFix { get; set; }
public string? FixedCode { get; set; }
public string? FixDescription { get; set; }
public List<CompilationError> RemainingErrors { get; set; }
}
CompilationResult
编译结果。
public class CompilationResult
{
public bool Success { get; set; }
public string Output { get; set; }
public List<CompilationError> Errors { get; set; }
public List<CompilationError> Warnings { get; set; }
}
API DTO 类
LanguagePairDto
语言对数据传输对象。
public class LanguagePairDto
{
public string SourceLanguage { get; set; }
public string TargetLanguage { get; set; }
public bool Supported { get; set; }
}
使用示例
创建转换请求
var request = new ConversionRequest
{
SourceCode = "public class Test { }",
SourceLanguage = LanguageType.CSharp,
TargetLanguage = LanguageType.Java,
ValidationRounds = 2,
Options = new ConversionOptions
{
KeepComments = true,
KeepDocStrings = true
}
};
使用转换服务
var service = new ConversionService();
var result = await service.ConvertAsync(request);
if (result.Success)
{
Console.WriteLine(result.TransformedCode);
}
检查转换支持
if (service.IsConversionSupported(LanguageType.CSharp, LanguageType.Java))
{
Console.WriteLine("C# to Java conversion is supported");
}