mirror of https://github.com/icsharpcode/ILSpy.git
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							41 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							41 lines
						
					
					
						
							1.5 KiB
						
					
					
				using System; | 
						|
using System.Collections.Generic; | 
						|
using System.Text; | 
						|
using System.Threading; | 
						|
using ICSharpCode.Decompiler.CSharp.Syntax; | 
						|
using ICSharpCode.Decompiler.TypeSystem; | 
						|
 | 
						|
namespace ICSharpCode.Decompiler | 
						|
{ | 
						|
	internal class DecompileRun | 
						|
	{ | 
						|
		public HashSet<string> DefinedSymbols { get; private set; } = new HashSet<string>(); | 
						|
		public HashSet<string> Namespaces { get; private set; } = new HashSet<string>(); | 
						|
		public CancellationToken CancellationToken { get; set; } | 
						|
		public DecompilerSettings Settings { get; } | 
						|
 | 
						|
		Lazy<CSharp.TypeSystem.UsingScope> usingScope => new Lazy<CSharp.TypeSystem.UsingScope>(() => CreateUsingScope(Namespaces)); | 
						|
		public CSharp.TypeSystem.UsingScope UsingScope => usingScope.Value; | 
						|
 | 
						|
		public DecompileRun(DecompilerSettings settings) | 
						|
		{ | 
						|
			this.Settings = settings ?? throw new ArgumentNullException(nameof(settings)); | 
						|
		} | 
						|
 | 
						|
		CSharp.TypeSystem.UsingScope CreateUsingScope(HashSet<string> requiredNamespacesSuperset) | 
						|
		{ | 
						|
			var usingScope = new CSharp.TypeSystem.UsingScope(); | 
						|
			foreach (var ns in requiredNamespacesSuperset) { | 
						|
				string[] parts = ns.Split('.'); | 
						|
				AstType nsType = new SimpleType(parts[0]); | 
						|
				for (int i = 1; i < parts.Length; i++) { | 
						|
					nsType = new MemberType { Target = nsType, MemberName = parts[i] }; | 
						|
				} | 
						|
				var reference = nsType.ToTypeReference(CSharp.Resolver.NameLookupMode.TypeInUsingDeclaration) as CSharp.TypeSystem.TypeOrNamespaceReference; | 
						|
				if (reference != null) | 
						|
					usingScope.Usings.Add(reference); | 
						|
			} | 
						|
			return usingScope; | 
						|
		} | 
						|
	} | 
						|
}
 | 
						|
 |