public static bool ReadJreStandardFile(out JarArchive archive) { archive = null; var javaHome = Environment.GetEnvironmentVariable("JAVA_HOME"); if (javaHome == null) { return(false); } if (Path.GetDirectoryName(javaHome).Contains("jdk")) { //Found jdk directory. Browse to the jre that's built in. javaHome = Path.Combine(javaHome, "jre"); } if (!Directory.Exists(javaHome)) { return(false); } var filePath = Path.Combine(javaHome, "lib", "rt.jar"); if (!File.Exists(filePath)) { return(false); } archive = ReadFile(filePath); return(true); }
public static MetadataJarArchive ToMetadata(this JarArchive archive) { return(new MetadataJarArchive { JavaClasses = archive.Classes.Select(c => (c.Key, c.Value.ToMetadata())) .ToDictionary(c => c.Item1, c => c.Item2) });
public static void LoadDataProperties(this JarArchive archive) { GC.Collect(); foreach (var(_, @class) in archive.Classes) { if (@class is DataJavaClass dataJavaClass) { dataJavaClass.OnCanLoad(); } } }
public static JarArchive ToDataClass(this MetadataJarArchive meta) { var archive = new JarArchive("Memory-File.jar", new byte[0]); var javaClasses = meta.JavaClasses.Select(c => (c.Key, c.Value.ToDataClass())); var repository = SyntheticRepository.GetInstance(); foreach (var(name, clazz) in javaClasses) { repository.StoreClass(new VirtualDataClass(clazz)); LoadedClassRepository.Instance.StoreClass(clazz); archive.Classes.Add(name, clazz); } return(archive); }