1 //---------------------------------------------------------------------
2 // <copyright file="Emitter.cs" company="Microsoft">
3 //      Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 //
6 // @owner       Microsoft
7 // @backupOwner Microsoft
8 //---------------------------------------------------------------------
9 
10 using System;
11 using System.CodeDom;
12 using System.Diagnostics;
13 using System.Data.EntityModel.SchemaObjectModel;
14 
15 
16 
17 
18 namespace System.Data.EntityModel.Emitters
19 {
20     /// <summary>
21     ///
22     /// </summary>
23     internal abstract class Emitter
24     {
25         #region Instance Fields
26         private ClientApiGenerator _generator = null;
27         #endregion
28 
29         #region Static Fields
30         private static CodeExpression _nullExpression = null;
31         private static CodeExpression _thisRef = null;
32 
33         /// <summary>Name of property used to get StorageContext from an Entity</summary>
34         private const string EntityGetContextPropertyName = "Context";
35         /// <summary>Name of property used to get StorageContext from a StorageSearcher</summary>
36         protected const string SearcherGetContextPropertyName = "Context";
37         #endregion
38 
39         #region Protected Methods
40         /// <summary>
41         ///
42         /// </summary>
43         /// <param name="generator"></param>
Emitter(ClientApiGenerator generator)44         protected Emitter(ClientApiGenerator generator)
45         {
46             Generator = generator;
47         }
48 
49         /// <summary>
50         ///
51         /// </summary>
52         /// <param name="expression"></param>
53         /// <returns></returns>
EmitExpressionEqualsNull(CodeExpression expression)54         protected static CodeBinaryOperatorExpression EmitExpressionEqualsNull(CodeExpression expression)
55         {
56             return new CodeBinaryOperatorExpression(expression, CodeBinaryOperatorType.IdentityEquality, NullExpression);
57         }
58 
EmitExpressionDoesNotEqualNull(CodeExpression expression)59         protected static CodeBinaryOperatorExpression EmitExpressionDoesNotEqualNull(CodeExpression expression)
60         {
61             return new CodeBinaryOperatorExpression(expression, CodeBinaryOperatorType.IdentityInequality, NullExpression);
62         }
63 
EmitEnumMemberExpression(CodeTypeReference type, string member)64         internal static CodeExpression EmitEnumMemberExpression(CodeTypeReference type, string member)
65         {
66             CodeTypeReferenceExpression typeref = new CodeTypeReferenceExpression(type);
67             return new CodeFieldReferenceExpression(typeref, member);
68         }
69         #endregion
70 
71         #region Protected Properties
72         /// <summary>
73         ///
74         /// </summary>
75         protected static CodeExpression ThisRef
76         {
77             get
78             {
79                 if (_thisRef == null)
80                     _thisRef = new CodeThisReferenceExpression();
81                 return _thisRef;
82             }
83         }
84 
85         /// <summary>
86         ///
87         /// </summary>
88         internal ClientApiGenerator Generator
89         {
90             get
91             {
92                 return _generator;
93             }
94             private set
95             {
96                 _generator = value;
97             }
98         }
99 
100         protected TypeReference TypeReference
101         {
102             get
103             {
104                 return _generator.TypeReference;
105             }
106         }
107 
108         protected AttributeEmitter AttributeEmitter
109         {
110             get { return _generator.AttributeEmitter; }
111         }
112 
113         protected static CodeExpression NullExpression
114         {
115             get
116             {
117                 if (_nullExpression == null)
118                     _nullExpression = new CodePrimitiveExpression(null);
119 
120                 return _nullExpression;
121 
122             }
123         }
124 
125         #endregion
126     }
127 }
128