16 internal sealed class VfsAssemblyClassDirectory : VfsDirectory
21 readonly ConcurrentDictionary<string, VfsEntry> cache =
new();
33 this.assembly = assembly ??
throw new ArgumentNullException(nameof(assembly));
34 this.package = package;
42 public override VfsEntry GetEntry(
string name)
44 return cache.GetOrAdd(name, CreateEntry);
52 VfsEntry CreateEntry(
string name)
54 if (name.EndsWith(
".class", StringComparison.Ordinal))
67#if FIRST_PASS || IMPORTER || EXPORTER
68 throw new NotImplementedException();
74 return acl.TryLoadClassByName(className);
93 return TryLoadType(className) is RuntimeJavaType tw && !tw.IsArray ?
new VfsAssemblyClassFile(Context, tw) :
null;
100 IEnumerable<Type> GetAssemblyTypes()
104 return assembly.GetTypes();
106 catch (ReflectionTypeLoadException e)
112 return Type.EmptyTypes;
124#if FIRST_PASS || IMPORTER || EXPORTER
125 throw new PlatformNotSupportedException();
129 throw new InvalidOperationException(
"Could not locate assembly loader.");
132 foreach (var type
in GetAssemblyTypes())
135 var name = acl.GetTypeNameAndType(type, out var isJavaType);
141 if (isJavaType && type.BaseType == typeof(global::ikvm.@
internal.AnnotationAttributeBase) && name.Value.Value.Span.Contains(
".$Proxy".AsSpan(), StringComparison.Ordinal))
145 if (name.Value.IsMemberOf(packageName) || name.Value.PackageName.IsChildOf(packageName))
146 return new VfsAssemblyClassDirectory(Context, assembly, packageName);
158 public override string[] List()
160#if FIRST_PASS || IMPORTER || EXPORTER
161 throw new PlatformNotSupportedException();
163 var lst =
new HashSet<string>();
167 throw new InvalidOperationException(
"Could not locate assembly loader.");
170 foreach (var type
in GetAssemblyTypes())
172 var name = acl.GetTypeNameAndType(type, out var isJavaType);
178 if (isJavaType && type.BaseType == typeof(global::ikvm.@
internal.AnnotationAttributeBase) && name.Value.Value.Span.Contains(
".$Proxy".AsSpan(), StringComparison.Ordinal))
183 if (name.Value.IsMemberOf(package))
185 lst.Add(name.Value.UnqualifiedName.ToString() +
".class");
191 if (name.Value.PackageName.IsChildOf(package))
202 if (m && e.MoveNext())
203 lst.Add(e.Current.ToString());
209 return lst.ToArray();
RuntimeAssemblyClassLoaderFactory AssemblyClassLoaderFactory
Gets the RuntimeAssemblyClassLoaderFactory associated with this instance of the runtime.