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