Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntityDesign / Design / System / Data / EntityModel / Emitters / PropertyEmitterBase.cs / 1 / PropertyEmitterBase.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.CodeDom; using System.Collections.Generic; using System.Data.Metadata.Edm; using System.Diagnostics; using System.Data.Entity.Design.SsdlGenerator; using System.Data.Entity.Design.Common; namespace System.Data.EntityModel.Emitters { internal abstract class PropertyEmitterBase : MetadataItemEmitter { private bool _declaringTypeUsesStandardBaseType; protected PropertyEmitterBase(ClientApiGenerator generator, MetadataItem item, bool declaringTypeUsesStandardBaseType) :base(generator, item) { Debug.Assert(item != null, "item is null"); _declaringTypeUsesStandardBaseType = declaringTypeUsesStandardBaseType; } ////// This is where the derived classes supply their emit logic. /// /// The CodeDom representation of the type that the property is being added to. protected abstract void EmitProperty(CodeTypeDeclaration typeDecl); ////// Validation logic specific to property emitters /// protected override void Validate() { VerifyGetterAndSetterAccessibilityCompatability(); Generator.VerifyLanguageCaseSensitiveCompatibilityForProperty(Item as EdmMember); } ////// The compiler ensures accessibility on a Setter/Getter is more restrictive than on the Property. /// However accessibility modifiers are not well ordered. Internal and Protected don't go well together /// because neither is more restrictive than others. /// private void VerifyGetterAndSetterAccessibilityCompatability() { if (PropertyEmitter.GetGetterAccessibility(Item) == MemberAttributes.Assembly && PropertyEmitter.GetSetterAccessibility(Item) == MemberAttributes.Family) { Generator.AddError(System.Data.Entity.Design.Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Internal", "Protected"), ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict, EdmSchemaErrorSeverity.Error, Item.DeclaringType.FullName, Item.Name); } else if (PropertyEmitter.GetGetterAccessibility(Item) == MemberAttributes.Family && PropertyEmitter.GetSetterAccessibility(Item) == MemberAttributes.Assembly) { Generator.AddError(System.Data.Entity.Design.Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Protected", "Internal"), ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict, EdmSchemaErrorSeverity.Error, Item.DeclaringType.FullName, Item.Name); } } ////// Main method for Emitting property code. /// /// The CodeDom representation of the type that the property is being added to. public void Emit(CodeTypeDeclaration typeDecl) { Validate(); EmitProperty(typeDecl); } protected bool AncestorClassDefinesName(string name) { if (_declaringTypeUsesStandardBaseType && Utils.DoesTypeReserveMemberName(Item.DeclaringType, name, Generator.LanguageAppropriateStringComparer)) { return true; } StructuralType baseType = Item.DeclaringType.BaseType as StructuralType; if (baseType != null && baseType.Members.Contains(name)) { return true; } return false; } public new EdmMember Item { get { return base.Item as EdmMember; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.CodeDom; using System.Collections.Generic; using System.Data.Metadata.Edm; using System.Diagnostics; using System.Data.Entity.Design.SsdlGenerator; using System.Data.Entity.Design.Common; namespace System.Data.EntityModel.Emitters { internal abstract class PropertyEmitterBase : MetadataItemEmitter { private bool _declaringTypeUsesStandardBaseType; protected PropertyEmitterBase(ClientApiGenerator generator, MetadataItem item, bool declaringTypeUsesStandardBaseType) :base(generator, item) { Debug.Assert(item != null, "item is null"); _declaringTypeUsesStandardBaseType = declaringTypeUsesStandardBaseType; } ////// This is where the derived classes supply their emit logic. /// /// The CodeDom representation of the type that the property is being added to. protected abstract void EmitProperty(CodeTypeDeclaration typeDecl); ////// Validation logic specific to property emitters /// protected override void Validate() { VerifyGetterAndSetterAccessibilityCompatability(); Generator.VerifyLanguageCaseSensitiveCompatibilityForProperty(Item as EdmMember); } ////// The compiler ensures accessibility on a Setter/Getter is more restrictive than on the Property. /// However accessibility modifiers are not well ordered. Internal and Protected don't go well together /// because neither is more restrictive than others. /// private void VerifyGetterAndSetterAccessibilityCompatability() { if (PropertyEmitter.GetGetterAccessibility(Item) == MemberAttributes.Assembly && PropertyEmitter.GetSetterAccessibility(Item) == MemberAttributes.Family) { Generator.AddError(System.Data.Entity.Design.Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Internal", "Protected"), ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict, EdmSchemaErrorSeverity.Error, Item.DeclaringType.FullName, Item.Name); } else if (PropertyEmitter.GetGetterAccessibility(Item) == MemberAttributes.Family && PropertyEmitter.GetSetterAccessibility(Item) == MemberAttributes.Assembly) { Generator.AddError(System.Data.Entity.Design.Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Protected", "Internal"), ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict, EdmSchemaErrorSeverity.Error, Item.DeclaringType.FullName, Item.Name); } } ////// Main method for Emitting property code. /// /// The CodeDom representation of the type that the property is being added to. public void Emit(CodeTypeDeclaration typeDecl) { Validate(); EmitProperty(typeDecl); } protected bool AncestorClassDefinesName(string name) { if (_declaringTypeUsesStandardBaseType && Utils.DoesTypeReserveMemberName(Item.DeclaringType, name, Generator.LanguageAppropriateStringComparer)) { return true; } StructuralType baseType = Item.DeclaringType.BaseType as StructuralType; if (baseType != null && baseType.Members.Contains(name)) { return true; } return false; } public new EdmMember Item { get { return base.Item as EdmMember; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MergablePropertyAttribute.cs
- SapiRecoContext.cs
- StoreUtilities.cs
- ComplexType.cs
- ReadOnlyPropertyMetadata.cs
- OracleCommandSet.cs
- MergeFailedEvent.cs
- WorkflowRuntimeSection.cs
- UriParserTemplates.cs
- SqlInfoMessageEvent.cs
- WindowHideOrCloseTracker.cs
- ActivityBuilderXamlWriter.cs
- ImageConverter.cs
- SqlTriggerContext.cs
- EasingKeyFrames.cs
- InvokeWebService.cs
- DockProviderWrapper.cs
- XmlStreamStore.cs
- DBProviderConfigurationHandler.cs
- Timeline.cs
- WmlPhoneCallAdapter.cs
- DiscoveryReferences.cs
- TypedTableBase.cs
- PreviewPrintController.cs
- BitmapSizeOptions.cs
- ISAPIApplicationHost.cs
- AlgoModule.cs
- PointConverter.cs
- TempFiles.cs
- OutputCacheSettingsSection.cs
- Decimal.cs
- SymLanguageType.cs
- BaseServiceProvider.cs
- HttpCapabilitiesEvaluator.cs
- ContentElement.cs
- Lookup.cs
- TraceEventCache.cs
- RegistrySecurity.cs
- SocketInformation.cs
- SpeechRecognitionEngine.cs
- CodePageUtils.cs
- EncodingTable.cs
- QueryOptionExpression.cs
- CompressEmulationStream.cs
- ObsoleteAttribute.cs
- DataGridViewTextBoxEditingControl.cs
- OracleParameterBinding.cs
- FullTrustAssembly.cs
- CodeTryCatchFinallyStatement.cs
- XmlKeywords.cs
- ValidatorCollection.cs
- RelatedPropertyManager.cs
- DockPanel.cs
- SwitchCase.cs
- SqlReferenceCollection.cs
- objectquery_tresulttype.cs
- FontWeights.cs
- DataStorage.cs
- ADMembershipUser.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- ToolStripDropDownItemDesigner.cs
- SqlDataSourceSelectingEventArgs.cs
- SparseMemoryStream.cs
- TextDecorationCollection.cs
- CodeCompileUnit.cs
- MaterialGroup.cs
- ListViewTableCell.cs
- OracleLob.cs
- hresults.cs
- RegexParser.cs
- ImmutableAssemblyCacheEntry.cs
- PageTrueTypeFont.cs
- DocumentEventArgs.cs
- VirtualPathProvider.cs
- ProtocolElement.cs
- Compiler.cs
- DnsElement.cs
- PrePrepareMethodAttribute.cs
- CalendarModeChangedEventArgs.cs
- PagedDataSource.cs
- MD5.cs
- Table.cs
- Condition.cs
- NodeLabelEditEvent.cs
- SessionEndingEventArgs.cs
- SimpleBitVector32.cs
- ByteAnimation.cs
- itemelement.cs
- IncrementalHitTester.cs
- TextRangeEditLists.cs
- PrefixQName.cs
- Decimal.cs
- RestHandlerFactory.cs
- DESCryptoServiceProvider.cs
- HtmlContainerControl.cs
- MobileErrorInfo.cs
- ClientSideQueueItem.cs
- WindowsNonControl.cs
- DeflateEmulationStream.cs
- UnsafeNativeMethods.cs