using System.CodeDom.Compiler; using System.Reflection; using System.Reflection.Emit; using JCIL.Java.Class; namespace JCIL.CLI; public class Program { public static void Main(string[] args) { var now = DateTime.Now; var loader = new TypeLoader(); loader.AddPath(Environment.CurrentDirectory); loader.AddPath("../extracted_java_classes/java.base/"); var javaClass = loader.LoadClass("Main".AsMemory()); Console.WriteLine($"Load time: {(DateTime.Now - now).TotalMilliseconds}ms"); var builder = new AssemblyBuilder(new AssemblyName("Test"), false); var dotnetClass = builder.MakeType(javaClass); try { dotnetClass.GetMethod(javaClass.Methods[1]); } catch (InvalidDataException e) { Console.WriteLine($"Compiled methods: {builder.CompiledMethods}/{builder.TotalMethods}"); Console.ForegroundColor = ConsoleColor.Red; Console.Error.WriteLine(e.Message); Environment.Exit(1); } finally { Console.WriteLine($"Compiled methods: {builder.CompiledMethods}/{builder.TotalMethods}"); var assembly = (PersistedAssemblyBuilder)builder.Assembly; assembly.Save("out.dll"); } } } internal static class Debug { public static readonly IndentedTextWriter Writer = new(Console.Error, "| "); }