PageRenderTime 52ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/src/iSynaptic.Core.CodeGeneration/Modeling/AbstractSyntaxTree/Generated.cs

https://github.com/iSynaptic/iSynaptic.Core
C# | 375 lines | 324 code | 51 blank | 0 comment | 0 complexity | f6aa1736763482371371d63e9475da4f MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using iSynaptic.Commons;
  5. namespace iSynaptic.CodeGeneration.Modeling.AbstractSyntaxTree
  6. {
  7. using SyntacticModel;
  8. public static class Syntax
  9. {
  10. public static AstNodeFamily Family(String @namespace, IEnumerable<IAstConcept> concepts)
  11. {
  12. return new AstNodeFamily(new SyntacticModel.Internal.AstNodeFamily(@namespace, concepts.Select(x => ((IAstNode<SyntacticModel.Internal.IAstConcept>)x).GetUnderlying())));
  13. }
  14. public static AstNode Node(Boolean isAbstract, Boolean isPartial, String simpleName, String typeName, Maybe<String> parentType, IEnumerable<String> baseTypes, IEnumerable<AstNodeProperty> properties)
  15. {
  16. return new AstNode(null, new SyntacticModel.Internal.AstNode(isAbstract, isPartial, simpleName, typeName, parentType, baseTypes, properties.Select(x => ((IAstNode<SyntacticModel.Internal.AstNodeProperty>)x).GetUnderlying())));
  17. }
  18. public static AstNodeContract Contract(String typeName, Maybe<String> parentType, IEnumerable<String> baseTypes, IEnumerable<AstNodeProperty> properties)
  19. {
  20. return new AstNodeContract(null, new SyntacticModel.Internal.AstNodeContract(typeName, parentType, baseTypes, properties.Select(x => ((IAstNode<SyntacticModel.Internal.AstNodeProperty>)x).GetUnderlying())));
  21. }
  22. public static AstNodeProperty Property(String simpleName, String type, AstNodePropertyCardinality cardinality)
  23. {
  24. return new AstNodeProperty(null, new SyntacticModel.Internal.AstNodeProperty(simpleName, type, cardinality));
  25. }
  26. }
  27. }
  28. namespace iSynaptic.CodeGeneration.Modeling.AbstractSyntaxTree.SyntacticModel
  29. {
  30. internal interface IAstNode<out T> : IVisitableChildren { T GetUnderlying(); }
  31. internal interface IAstUnderlyingNode<out T, in TParent> { T MakePublic(TParent parent); }
  32. public class AstNodeFamily : IAstNode<Internal.AstNodeFamily>
  33. {
  34. private readonly Internal.AstNodeFamily _underlying;
  35. internal AstNodeFamily(Internal.AstNodeFamily underlying)
  36. {
  37. _underlying = underlying;
  38. }
  39. Internal.AstNodeFamily IAstNode<Internal.AstNodeFamily>.GetUnderlying() { return _underlying; }
  40. public virtual void AcceptChildren(Action<IEnumerable<Object>> dispatch)
  41. {
  42. dispatch(Concepts);
  43. }
  44. public String Namespace
  45. {
  46. get
  47. {
  48. return ((IAstNode<Internal.AstNodeFamily>)this).GetUnderlying().Namespace;
  49. }
  50. }
  51. public IEnumerable<IAstConcept> Concepts
  52. {
  53. get
  54. {
  55. return ((IAstNode<Internal.AstNodeFamily>)this).GetUnderlying().Concepts.Select(x => ((IAstUnderlyingNode<IAstConcept, AstNodeFamily>)x).MakePublic(this));
  56. }
  57. }
  58. }
  59. public interface IAstConcept : IVisitableChildren
  60. {
  61. String TypeName { get; }
  62. IEnumerable<String> BaseTypes { get; }
  63. Maybe<String> ParentType { get; }
  64. IEnumerable<AstNodeProperty> Properties { get; }
  65. AstNodeFamily Parent { get; }
  66. }
  67. public class AstNode : IAstConcept, IAstNode<Internal.AstNode>
  68. {
  69. private readonly AstNodeFamily _parent;
  70. private readonly Internal.AstNode _underlying;
  71. internal AstNode(AstNodeFamily parent, Internal.AstNode underlying)
  72. {
  73. _parent = parent;
  74. _underlying = underlying;
  75. }
  76. public AstNodeFamily Parent { get { return _parent; } }
  77. AstNodeFamily IAstConcept.Parent { get { return Parent; } }
  78. Internal.AstNode IAstNode<Internal.AstNode>.GetUnderlying() { return _underlying; }
  79. public virtual void AcceptChildren(Action<IEnumerable<Object>> dispatch)
  80. {
  81. dispatch(Properties);
  82. }
  83. public Boolean IsAbstract
  84. {
  85. get
  86. {
  87. return ((IAstNode<Internal.AstNode>)this).GetUnderlying().IsAbstract;
  88. }
  89. }
  90. public Boolean IsPartial
  91. {
  92. get
  93. {
  94. return ((IAstNode<Internal.AstNode>)this).GetUnderlying().IsPartial;
  95. }
  96. }
  97. public String SimpleName
  98. {
  99. get
  100. {
  101. return ((IAstNode<Internal.AstNode>)this).GetUnderlying().SimpleName;
  102. }
  103. }
  104. public String TypeName
  105. {
  106. get
  107. {
  108. return ((IAstNode<Internal.AstNode>)this).GetUnderlying().TypeName;
  109. }
  110. }
  111. public Maybe<String> ParentType
  112. {
  113. get
  114. {
  115. return ((IAstNode<Internal.AstNode>)this).GetUnderlying().ParentType;
  116. }
  117. }
  118. public IEnumerable<String> BaseTypes
  119. {
  120. get
  121. {
  122. return ((IAstNode<Internal.AstNode>)this).GetUnderlying().BaseTypes;
  123. }
  124. }
  125. public IEnumerable<AstNodeProperty> Properties
  126. {
  127. get
  128. {
  129. return ((IAstNode<Internal.AstNode>)this).GetUnderlying().Properties.Select(x => ((IAstUnderlyingNode<AstNodeProperty, AstNode>)x).MakePublic(this));
  130. }
  131. }
  132. }
  133. public class AstNodeContract : IAstConcept, IAstNode<Internal.AstNodeContract>
  134. {
  135. private readonly AstNodeFamily _parent;
  136. private readonly Internal.AstNodeContract _underlying;
  137. internal AstNodeContract(AstNodeFamily parent, Internal.AstNodeContract underlying)
  138. {
  139. _parent = parent;
  140. _underlying = underlying;
  141. }
  142. public AstNodeFamily Parent { get { return _parent; } }
  143. AstNodeFamily IAstConcept.Parent { get { return Parent; } }
  144. Internal.AstNodeContract IAstNode<Internal.AstNodeContract>.GetUnderlying() { return _underlying; }
  145. public virtual void AcceptChildren(Action<IEnumerable<Object>> dispatch)
  146. {
  147. dispatch(Properties);
  148. }
  149. public String TypeName
  150. {
  151. get
  152. {
  153. return ((IAstNode<Internal.AstNodeContract>)this).GetUnderlying().TypeName;
  154. }
  155. }
  156. public Maybe<String> ParentType
  157. {
  158. get
  159. {
  160. return ((IAstNode<Internal.AstNodeContract>)this).GetUnderlying().ParentType;
  161. }
  162. }
  163. public IEnumerable<String> BaseTypes
  164. {
  165. get
  166. {
  167. return ((IAstNode<Internal.AstNodeContract>)this).GetUnderlying().BaseTypes;
  168. }
  169. }
  170. public IEnumerable<AstNodeProperty> Properties
  171. {
  172. get
  173. {
  174. return ((IAstNode<Internal.AstNodeContract>)this).GetUnderlying().Properties.Select(x => ((IAstUnderlyingNode<AstNodeProperty, AstNodeContract>)x).MakePublic(this));
  175. }
  176. }
  177. }
  178. public class AstNodeProperty : IAstNode<Internal.AstNodeProperty>
  179. {
  180. private readonly IAstConcept _parent;
  181. private readonly Internal.AstNodeProperty _underlying;
  182. internal AstNodeProperty(IAstConcept parent, Internal.AstNodeProperty underlying)
  183. {
  184. _parent = parent;
  185. _underlying = underlying;
  186. }
  187. public IAstConcept Parent { get { return _parent; } }
  188. Internal.AstNodeProperty IAstNode<Internal.AstNodeProperty>.GetUnderlying() { return _underlying; }
  189. public virtual void AcceptChildren(Action<IEnumerable<Object>> dispatch)
  190. {
  191. }
  192. public String SimpleName
  193. {
  194. get
  195. {
  196. return ((IAstNode<Internal.AstNodeProperty>)this).GetUnderlying().SimpleName;
  197. }
  198. }
  199. public String Type
  200. {
  201. get
  202. {
  203. return ((IAstNode<Internal.AstNodeProperty>)this).GetUnderlying().Type;
  204. }
  205. }
  206. public AstNodePropertyCardinality Cardinality
  207. {
  208. get
  209. {
  210. return ((IAstNode<Internal.AstNodeProperty>)this).GetUnderlying().Cardinality;
  211. }
  212. }
  213. }
  214. namespace Internal
  215. {
  216. internal class AstNodeFamily : IAstUnderlyingNode<SyntacticModel.AstNodeFamily, Object>
  217. {
  218. private readonly String _namespace;
  219. private readonly IEnumerable<IAstConcept> _concepts;
  220. public AstNodeFamily(String @namespace, IEnumerable<IAstConcept> concepts)
  221. {
  222. _namespace = @namespace;
  223. _concepts = concepts;
  224. }
  225. public SyntacticModel.AstNodeFamily MakePublic(Object parent)
  226. {
  227. return BuildPublic(parent);
  228. }
  229. protected virtual SyntacticModel.AstNodeFamily BuildPublic(Object parent)
  230. {
  231. return new SyntacticModel.AstNodeFamily(this);
  232. }
  233. public String Namespace { get { return _namespace; } }
  234. public IEnumerable<IAstConcept> Concepts { get { return _concepts; } }
  235. }
  236. internal interface IAstConcept
  237. {
  238. }
  239. internal class AstNode : IAstConcept, IAstUnderlyingNode<SyntacticModel.AstNode, SyntacticModel.AstNodeFamily>
  240. {
  241. private readonly Boolean _isAbstract;
  242. private readonly Boolean _isPartial;
  243. private readonly String _simpleName;
  244. private readonly String _typeName;
  245. private readonly Maybe<String> _parentType;
  246. private readonly IEnumerable<String> _baseTypes;
  247. private readonly IEnumerable<AstNodeProperty> _properties;
  248. public AstNode(Boolean isAbstract, Boolean isPartial, String simpleName, String typeName, Maybe<String> parentType, IEnumerable<String> baseTypes, IEnumerable<AstNodeProperty> properties)
  249. {
  250. _isAbstract = isAbstract;
  251. _isPartial = isPartial;
  252. _simpleName = simpleName;
  253. _typeName = typeName;
  254. _parentType = parentType;
  255. _baseTypes = baseTypes;
  256. _properties = properties;
  257. }
  258. public SyntacticModel.AstNode MakePublic(SyntacticModel.AstNodeFamily parent)
  259. {
  260. return BuildPublic(parent);
  261. }
  262. protected virtual SyntacticModel.AstNode BuildPublic(SyntacticModel.AstNodeFamily parent)
  263. {
  264. return new SyntacticModel.AstNode(parent, this);
  265. }
  266. public Boolean IsAbstract { get { return _isAbstract; } }
  267. public Boolean IsPartial { get { return _isPartial; } }
  268. public String SimpleName { get { return _simpleName; } }
  269. public String TypeName { get { return _typeName; } }
  270. public Maybe<String> ParentType { get { return _parentType; } }
  271. public IEnumerable<String> BaseTypes { get { return _baseTypes; } }
  272. public IEnumerable<AstNodeProperty> Properties { get { return _properties; } }
  273. }
  274. internal class AstNodeContract : IAstConcept, IAstUnderlyingNode<SyntacticModel.AstNodeContract, SyntacticModel.AstNodeFamily>
  275. {
  276. private readonly String _typeName;
  277. private readonly Maybe<String> _parentType;
  278. private readonly IEnumerable<String> _baseTypes;
  279. private readonly IEnumerable<AstNodeProperty> _properties;
  280. public AstNodeContract(String typeName, Maybe<String> parentType, IEnumerable<String> baseTypes, IEnumerable<AstNodeProperty> properties)
  281. {
  282. _typeName = typeName;
  283. _parentType = parentType;
  284. _baseTypes = baseTypes;
  285. _properties = properties;
  286. }
  287. public SyntacticModel.AstNodeContract MakePublic(SyntacticModel.AstNodeFamily parent)
  288. {
  289. return BuildPublic(parent);
  290. }
  291. protected virtual SyntacticModel.AstNodeContract BuildPublic(SyntacticModel.AstNodeFamily parent)
  292. {
  293. return new SyntacticModel.AstNodeContract(parent, this);
  294. }
  295. public String TypeName { get { return _typeName; } }
  296. public Maybe<String> ParentType { get { return _parentType; } }
  297. public IEnumerable<String> BaseTypes { get { return _baseTypes; } }
  298. public IEnumerable<AstNodeProperty> Properties { get { return _properties; } }
  299. }
  300. internal class AstNodeProperty : IAstUnderlyingNode<SyntacticModel.AstNodeProperty, SyntacticModel.IAstConcept>
  301. {
  302. private readonly String _simpleName;
  303. private readonly String _type;
  304. private readonly AstNodePropertyCardinality _cardinality;
  305. public AstNodeProperty(String simpleName, String type, AstNodePropertyCardinality cardinality)
  306. {
  307. _simpleName = simpleName;
  308. _type = type;
  309. _cardinality = cardinality;
  310. }
  311. public SyntacticModel.AstNodeProperty MakePublic(SyntacticModel.IAstConcept parent)
  312. {
  313. return BuildPublic(parent);
  314. }
  315. protected virtual SyntacticModel.AstNodeProperty BuildPublic(SyntacticModel.IAstConcept parent)
  316. {
  317. return new SyntacticModel.AstNodeProperty(parent, this);
  318. }
  319. public String SimpleName { get { return _simpleName; } }
  320. public String Type { get { return _type; } }
  321. public AstNodePropertyCardinality Cardinality { get { return _cardinality; } }
  322. }
  323. }
  324. }