using System.Collections.Generic; using System.IO; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Syntax; using Semmle.Extraction.CSharp.Entities.Statements; namespace Semmle.Extraction.CSharp.Entities { internal class ImplicitMainMethod : OrdinaryMethod { private readonly List globalStatements; public ImplicitMainMethod(Context cx, IMethodSymbol symbol, List globalStatements) : base(cx, symbol) { this.globalStatements = globalStatements; } protected override void PopulateMethodBody(TextWriter trapFile) { GlobalStatementsBlock.Create(Context, this, globalStatements); } public static ImplicitMainMethod Create(Context cx, IMethodSymbol method, List globalStatements) { return ImplicitMainMethodFactory.Instance.CreateEntity(cx, method, (method, globalStatements)); } private class ImplicitMainMethodFactory : CachedEntityFactory<(IMethodSymbol, List), ImplicitMainMethod> { public static ImplicitMainMethodFactory Instance { get; } = new ImplicitMainMethodFactory(); public override ImplicitMainMethod Create(Context cx, (IMethodSymbol, List) init) => new ImplicitMainMethod(cx, init.Item1, init.Item2); } } }