Beispiel #1
0
        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);
        }
Beispiel #2
0
 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)
     });
Beispiel #3
0
 public static void LoadDataProperties(this JarArchive archive)
 {
     GC.Collect();
     foreach (var(_, @class) in archive.Classes)
     {
         if (@class is DataJavaClass dataJavaClass)
         {
             dataJavaClass.OnCanLoad();
         }
     }
 }
Beispiel #4
0
        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);
        }