private void LoadJarMetadata() { var knownMetadata = new[] { "rt", //Base Java classes "spigot-api-1.14.4", //Spigot API classes "skript-mirror", //skript-mirror classes "Skript", //Skript classes }; var archives = new List <JarArchive>(); foreach (var metaName in knownMetadata) { var assembly = typeof(SkriptWorkspace).Assembly; var resourceName = assembly.GetManifestResourceNames() .SingleOrDefault(str => str.EndsWith($"{metaName}.simeta")); if (resourceName == null) { continue; } using var stream = assembly.GetManifestResourceStream(resourceName); if (stream == null) { continue; } //Load metadata archives.Add(MetadataIo.ReadArchiveMetadataFromStream(stream).ToDataClass()); } archives.ForEach(a => a.LoadDataProperties()); }
static void Main(string[] args) { var parser = new Parser(with => with.HelpWriter = null); var result = parser.ParseArguments <Options>(args); var helpText = HelpText.AutoBuild(result, h => { h.Heading = "SkriptInsight Metadata Extractor - Console Tool"; h.Copyright = "Copyright (c) 2019 SkriptInsight"; return(HelpText.DefaultParsingErrorsHandler(result, h)); }, e => e); result .WithNotParsed(errs => Console.WriteLine(helpText)) .WithParsed(o => { if (o.None) { currentLevel = LogLevel.None; } else if (o.Verbose) { currentLevel = LogLevel.Verbose; } else if (o.Debug) { currentLevel = LogLevel.Debug; } MetadataIo.LogMessage += (_, s) => Log(s.level, s.message); if (File.Exists(JreMetadataFile)) { //Load the JRE's rt metadata from an existing file. var metaJre = MetadataIo.ReadArchiveMetadata("jre-rt.simeta"); var dataJre = metaJre.ToDataClass(); dataJre.LoadDataProperties(); } else { //Try to load it from the java install if (!MetadataExtractor.ReadJreStandardFile(out _)) { Log( "ERROR: Unable to find the rt.jar file and there's no metadata in the current working directory!"); Log("ERROR: Do you have the JAVA_HOME variable setup correctly?"); return; } } GC.Collect(); foreach (var s in o.ClassPath) { if (!File.Exists(s)) { Log($"WARN: File \"{s}\" doesn't exist and was skipped."); continue; } switch (Path.GetExtension(s)) { case JarExtension: MetadataExtractor.ReadFile(s); break; case SkriptInsightMetaExtension: MetadataIo.ReadArchiveMetadata(s).ToDataClass(); break; default: Log($"WARN: File \"{s}\" has an unknown file extension and got skipped."); break; } } foreach (var s in o.Files) { if (!File.Exists(s)) { Log($"WARN: File \"{s}\" doesn't exist and was skipped."); continue; } var finalFileName = Path.Combine(o.OutputDirectory, Path.GetFileName(Path.ChangeExtension(s, SkriptInsightMetaExtension))); if (File.Exists(finalFileName)) { if (o.SkipExistingFiles) { Log( $"INFO: Skipping writing file \"{s}\" because it already exists and the \"skip-existing\" option is enabled."); continue; } File.Delete(finalFileName); } LogVerbose($"Starting to write archive metadata for \"{finalFileName}\""); MetadataIo.WriteArchiveMetadata(finalFileName, MetadataExtractor.ReadFile(s).ToMetadata()); LogVerbose($"Finished writing archive metadata for \"{finalFileName}\""); GC.Collect(); } Log("Finished processing all files."); }); }