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
- BoundField.cs
- ToolboxItemImageConverter.cs
- DrawListViewItemEventArgs.cs
- BasicBrowserDialog.designer.cs
- AccessDataSourceView.cs
- OdbcParameter.cs
- WebServiceTypeData.cs
- AxImporter.cs
- ReachDocumentPageSerializer.cs
- OciHandle.cs
- DocumentViewerConstants.cs
- MailAddress.cs
- RestHandler.cs
- DetailsViewDeleteEventArgs.cs
- JpegBitmapDecoder.cs
- EventBookmark.cs
- StandardBindingElement.cs
- CollectionAdapters.cs
- TextDocumentView.cs
- TileModeValidation.cs
- PaperSize.cs
- XPathSelfQuery.cs
- DataGridCommandEventArgs.cs
- SafeArrayRankMismatchException.cs
- XamlGridLengthSerializer.cs
- InstanceKeyCollisionException.cs
- WebHeaderCollection.cs
- ExceptionValidationRule.cs
- x509utils.cs
- isolationinterop.cs
- DataGridViewColumnCollection.cs
- Currency.cs
- PackagingUtilities.cs
- CancelEventArgs.cs
- XmlHelper.cs
- ContextTokenTypeConverter.cs
- JsonWriterDelegator.cs
- DependencyObjectType.cs
- TreeNodeCollection.cs
- Array.cs
- ContractHandle.cs
- JavaScriptSerializer.cs
- SqlMethodCallConverter.cs
- RevocationPoint.cs
- DataGridViewAccessibleObject.cs
- ServicePointManager.cs
- FormViewUpdatedEventArgs.cs
- MessageFilterException.cs
- LabelEditEvent.cs
- LiteralText.cs
- TextBoxView.cs
- FamilyTypeface.cs
- GenericRootAutomationPeer.cs
- Win32MouseDevice.cs
- _NestedMultipleAsyncResult.cs
- EpmContentDeSerializerBase.cs
- WindowInteractionStateTracker.cs
- DataGridViewCellMouseEventArgs.cs
- PolicyManager.cs
- DragDropManager.cs
- DataGridViewLinkCell.cs
- DoubleConverter.cs
- ParamArrayAttribute.cs
- DeadCharTextComposition.cs
- sqlstateclientmanager.cs
- WebServiceReceiveDesigner.cs
- MarkupObject.cs
- IdentityNotMappedException.cs
- CDSsyncETWBCLProvider.cs
- NativeMethods.cs
- TypeNameHelper.cs
- NGCSerializationManagerAsync.cs
- RegexCode.cs
- EncryptedKey.cs
- XmlRawWriter.cs
- PersonalizationDictionary.cs
- ActivityTypeDesigner.xaml.cs
- TextBlock.cs
- ViewDesigner.cs
- GeometryModel3D.cs
- SchemaHelper.cs
- StaticContext.cs
- Decimal.cs
- RolePrincipal.cs
- Int32CollectionConverter.cs
- EvidenceTypeDescriptor.cs
- ContextMenuStripActionList.cs
- DataGridViewLayoutData.cs
- HttpRequestCacheValidator.cs
- StreamUpdate.cs
- SqlDataSourceFilteringEventArgs.cs
- DragDeltaEventArgs.cs
- RadioButtonAutomationPeer.cs
- _DomainName.cs
- ReadingWritingEntityEventArgs.cs
- SignatureHelper.cs
- TransformedBitmap.cs
- ProtocolsSection.cs
- Int16AnimationUsingKeyFrames.cs
- externdll.cs