mirror of
				https://github.com/esiur/esiur-dotnet.git
				synced 2025-10-30 23:51:34 +00:00 
			
		
		
		
	Source Generation
This commit is contained in:
		| @@ -24,47 +24,57 @@ namespace Esiur.Proxy | ||||
|             if (!(context.SyntaxContextReceiver is ResourceGeneratorReceiver receiver)) | ||||
|                 return; | ||||
|  | ||||
| //#if DEBUG | ||||
| //            if (!Debugger.IsAttached) | ||||
| //            { | ||||
| //                Debugger.Launch(); | ||||
| //            } | ||||
| //#endif | ||||
|  | ||||
|             //var toImplement = receiver.Classes.Where(x => x.Fields.Length > 0); | ||||
|  | ||||
|             foreach (var ci in receiver.Classes) | ||||
|             try | ||||
|             { | ||||
|                 var code = @$"using Esiur.Resource;  | ||||
|                 //#if DEBUG | ||||
|                 //            if (!Debugger.IsAttached) | ||||
|                 //            { | ||||
|                 //                Debugger.Launch(); | ||||
|                 //            } | ||||
|                 //#endif | ||||
|  | ||||
|                 //var toImplement = receiver.Classes.Where(x => x.Fields.Length > 0); | ||||
|  | ||||
|                 foreach (var ci in receiver.Classes) | ||||
|                 { | ||||
|                     var code = @$"using Esiur.Resource;  | ||||
| using Esiur.Core;  | ||||
| namespace { ci.ClassSymbol.ContainingNamespace.ToDisplayString() } {{ | ||||
| "; | ||||
|  | ||||
|                 if (ci.ImplementInterface) | ||||
|                     code += $"public partial class {ci.Name} {{"; | ||||
|                 else | ||||
|                 { | ||||
|                     code += @$"public partial class {ci.Name} : IResource {{ | ||||
|                     if (ci.ImplementInterface) | ||||
|                         code += $"public partial class {ci.Name} {{"; | ||||
|                     else | ||||
|                     { | ||||
|                         code += @$"public partial class {ci.Name} : IResource {{ | ||||
| public Instance Instance {{ get; set; }} | ||||
| public event DestroyedEvent OnDestroy; | ||||
| public virtual void Destroy() {{ OnDestroy?.Invoke(this); }} | ||||
| "; | ||||
|  | ||||
|                     if (!ci.ImplementTrigger) | ||||
|                         code += "public AsyncReply<bool> Trigger(ResourceTrigger trigger) => new AsyncReply<bool>(true);"; | ||||
|                         if (!ci.ImplementTrigger) | ||||
|                             code += "public AsyncReply<bool> Trigger(ResourceTrigger trigger) => new AsyncReply<bool>(true);\r\n"; | ||||
|                     } | ||||
|  | ||||
|                     foreach (var f in ci.Fields) | ||||
|                     { | ||||
|                         var fn = f.Name; | ||||
|                         var pn = fn.Substring(0, 1).ToUpper() + fn.Substring(1); | ||||
|  | ||||
|                         // copy attributes  | ||||
|                         var attrs = string.Join(" ", f.GetAttributes().Select(x => $"[{x.ToString()}]")); | ||||
|                         code += $"{attrs} public {f.Type} {pn} {{ get => {fn}; set {{ {fn} = value; Instance?.Modified(); }} }}\r\n"; | ||||
|                     } | ||||
|  | ||||
|                     code += "}}\r\n"; | ||||
|  | ||||
|                     //System.IO.File.WriteAllText("c:\\gen\\" + ci.Name + "_esiur.cs", code); | ||||
|                     context.AddSource(ci.Name + "_esiur.cs", code); | ||||
|                 } | ||||
|  | ||||
|                 foreach (var f in ci.Fields) | ||||
|                 { | ||||
|                     var fn = f.Name; | ||||
|                     var pn = fn.Substring(0, 1).ToUpper() + fn.Substring(1); | ||||
|                     code += $@"[Public] public {f.Type} {pn} {{ get => {fn}; set {{ {fn} = value; Instance.Modified(); }} }}"; | ||||
|                 } | ||||
|  | ||||
|                 code += "}}"; | ||||
|  | ||||
|                 //System.IO.File.WriteAllText("C:\\www\\class.cs", code); | ||||
|                 context.AddSource(ci.Name + "_esiur.cs", code); | ||||
|             } | ||||
|             catch //(Exception ex) | ||||
|             { | ||||
|                 //System.IO.File.AppendAllText("c:\\gen\\error.log", ex.ToString() + "\r\n"); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user