Example #1
0
 internal override VfsEntry GetEntry(int index, string[] path)
 {
     if (path[path.Length - 1].EndsWith(".class", StringComparison.Ordinal))
     {
         System.Text.StringBuilder sb = new System.Text.StringBuilder();
         for (int i = index; i < path.Length - 1; i++)
         {
             sb.Append(path[i]).Append('.');
         }
         sb.Append(path[path.Length - 1], 0, path[path.Length - 1].Length - 6);
         string   className = sb.ToString();
         VfsEntry entry;
         lock (classes)
         {
             if (classes.TryGetValue(className, out entry))
             {
                 return(entry);
             }
         }
         AssemblyClassLoader acl = AssemblyClassLoader.FromAssembly(asm);
         TypeWrapper         tw  = null;
         try
         {
             tw = acl.LoadClassByDottedNameFast(className);
         }
         catch
         {
         }
         if (tw != null && !tw.IsArray)
         {
             lock (classes)
             {
                 if (!classes.TryGetValue(className, out entry))
                 {
                     entry = new VfsAssemblyClass(tw);
                     classes.Add(className, entry);
                 }
             }
             return(entry);
         }
         return(null);
     }
     else
     {
         Populate();
         return(base.GetEntry(index, path));
     }
 }
Example #2
0
			internal override VfsEntry GetEntry(int index, string[] path)
			{
				if (path[path.Length - 1].EndsWith(".class", StringComparison.Ordinal))
				{
					System.Text.StringBuilder sb = new System.Text.StringBuilder();
					for (int i = index; i < path.Length - 1; i++)
					{
						sb.Append(path[i]).Append('.');
					}
					sb.Append(path[path.Length - 1], 0, path[path.Length - 1].Length - 6);
					string className = sb.ToString();
					VfsEntry entry;
					lock (classes)
					{
						if (classes.TryGetValue(className, out entry))
						{
							return entry;
						}
					}
					AssemblyClassLoader acl = AssemblyClassLoader.FromAssembly(asm);
					TypeWrapper tw = null;
					try
					{
						tw = acl.LoadClassByDottedNameFast(className);
					}
					catch
					{
					}
					if (tw != null && !tw.IsArray)
					{
						lock (classes)
						{
							if (!classes.TryGetValue(className, out entry))
							{
								entry = new VfsAssemblyClass(tw);
								classes.Add(className, entry);
							}
						}
						return entry;
					}
					return null;
				}
				else
				{
					Populate();
					return base.GetEntry(index, path);
				}
			}