private BlockChainType GetBlockChainType(GoParser.SourceFileContext context) { if (context.GetText().ToLower().Contains("ethereum")) { return(BlockChainType.Ethereum); } if (context.GetText().ToLower().Contains("bitcoin")) { return(BlockChainType.Bitcoin); } if (context.GetText().ToLower().Contains("neo")) { return(BlockChainType.Neo); } if (context.GetText().ToLower().Contains("fabric")) { return(BlockChainType.Fabric); } return(BlockChainType.Ethereum); }
public override object VisitSourceFile(GoParser.SourceFileContext context) { Go.PackageName = context.packageClause()?.IDENTIFIER()?.GetText(); Go.BlockChainType = GetBlockChainType(context); if (context.importDecl() != null && context.importDecl().GetType() == typeof(GoParser.ImportDeclContext[])) { var imports = context.importDecl(); foreach (var import in imports) { if (import.importSpec() != null) { foreach (var importSpec in import.importSpec()) { Go.Imports.Add( $"{importSpec.IDENTIFIER()?.GetText()} Path: {importSpec.importPath()?.GetText()}"); } } } } if (context.declaration() != null && context.declaration().GetType() == typeof(GoParser.DeclarationContext[])) { foreach (var declaration in context.declaration()) { if (declaration.constDecl()?.constSpec() != null) { foreach (var constant in declaration.constDecl().constSpec()) { if (constant.identifierList()?.IDENTIFIER() != null) { foreach (var identifier in constant.identifierList().IDENTIFIER()) { Go.Consts.Add(new Go.Const { Name = identifier.GetText(), Type = constant.type_()?.GetText() }); } } } } if (declaration.varDecl()?.varSpec() != null) { foreach (var var in declaration.varDecl().varSpec()) { if (var.identifierList()?.IDENTIFIER() != null) { foreach (var identifier in var.identifierList().IDENTIFIER()) { Go.Vars.Add(new Go.Var { Name = identifier.GetText(), Type = var.type_()?.GetText() }); } } } } if (declaration.typeDecl()?.typeSpec() != null) { foreach (var type in declaration.typeDecl().typeSpec()) { Go.Types.Add(new Go.Type_() { Name = type.IDENTIFIER()?.GetText(), Type = type.type_()?.GetText() }); } } } } if (context.functionDecl() != null && context.functionDecl().GetType() == typeof(GoParser.FunctionDeclContext[])) { foreach (var function in context.functionDecl()) { var inputs = new List <Go.Parameter>(); var returns = new List <Go.Parameter>(); if (function.signature()?.parameters()?.parameterDecl() != null) { foreach (var parameter in function.signature().parameters().parameterDecl()) { if (parameter.identifierList()?.IDENTIFIER() != null) { foreach (var identifier in parameter.identifierList().IDENTIFIER()) { inputs.Add(new Go.Parameter { Name = identifier.GetText(), Type = parameter.type_()?.GetText() }); } } } } if (function.signature()?.result()?.parameters()?.parameterDecl() != null) { foreach (var parameter in function.signature().result().parameters().parameterDecl()) { if (parameter.identifierList()?.IDENTIFIER() != null) { foreach (var identifier in parameter.identifierList().IDENTIFIER()) { returns.Add(new Go.Parameter { Name = identifier.GetText(), Type = parameter.type_()?.GetText() }); } } } } Go.Functions.Add(new Go.Function { Name = function.IDENTIFIER()?.GetText(), Inputs = inputs, Returns = returns }); } } if (context.methodDecl() != null && context.methodDecl().GetType() == typeof(GoParser.MethodDeclContext[])) { foreach (var method in context.methodDecl()) { var inputs = new List <Go.Parameter>(); var returns = new List <Go.Parameter>(); var receiver = new List <Go.Parameter>(); if (method.signature()?.parameters()?.parameterDecl() != null) { foreach (var parameter in method.signature().parameters().parameterDecl()) { if (parameter.identifierList()?.IDENTIFIER() != null) { foreach (var identifier in parameter.identifierList().IDENTIFIER()) { inputs.Add(new Go.Parameter { Name = identifier.GetText(), Type = parameter.type_()?.GetText() }); } } } } if (method.signature()?.result()?.parameters()?.parameterDecl() != null) { foreach (var parameter in method.signature().result().parameters().parameterDecl()) { if (parameter.identifierList()?.IDENTIFIER() != null) { foreach (var identifier in parameter.identifierList().IDENTIFIER()) { returns.Add(new Go.Parameter { Name = identifier.GetText(), Type = parameter.type_()?.GetText() }); } } } } if (method.receiver()?.parameters()?.parameterDecl() != null) { foreach (var parameter in method.receiver().parameters().parameterDecl()) { if (parameter.identifierList()?.IDENTIFIER() != null) { foreach (var identifier in parameter.identifierList().IDENTIFIER()) { receiver.Add(new Go.Parameter { Name = identifier.GetText(), Type = parameter.type_()?.GetText() }); } } } } Go.Methods.Add(new Go.Method { Name = method.IDENTIFIER()?.GetText(), Inputs = inputs, Returns = returns, Receiver = receiver }); } } return(null); }