Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntityDesign / Design / System / Data / EntityModel / Emitters / PropertyEmitterBase.cs / 1305376 / 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
- StylusDevice.cs
- RowUpdatedEventArgs.cs
- ScrollChangedEventArgs.cs
- VarRefManager.cs
- MetabaseSettingsIis7.cs
- OutOfMemoryException.cs
- ColumnWidthChangedEvent.cs
- ToolStripDropDownClosedEventArgs.cs
- TypeForwardedToAttribute.cs
- ValidatedControlConverter.cs
- TemplateInstanceAttribute.cs
- DataGridViewTopLeftHeaderCell.cs
- HttpCacheVary.cs
- ResourcesGenerator.cs
- UIElementIsland.cs
- DefaultAsyncDataDispatcher.cs
- EntityDataSourceDesignerHelper.cs
- XamlVector3DCollectionSerializer.cs
- UrlMappingsModule.cs
- ResourceDictionaryCollection.cs
- Clause.cs
- SamlSubjectStatement.cs
- RowBinding.cs
- SoapSchemaMember.cs
- HttpContextServiceHost.cs
- LinqDataSourceInsertEventArgs.cs
- TimeStampChecker.cs
- ObjectTag.cs
- AppSettingsExpressionEditor.cs
- hwndwrapper.cs
- ProfileGroupSettings.cs
- TemplateInstanceAttribute.cs
- StorageModelBuildProvider.cs
- control.ime.cs
- UnsafeNativeMethodsCLR.cs
- AutomationFocusChangedEventArgs.cs
- OlePropertyStructs.cs
- TextEditorMouse.cs
- CompensatableTransactionScopeActivityDesigner.cs
- ObjectReferenceStack.cs
- PersonalizationProviderHelper.cs
- EdmScalarPropertyAttribute.cs
- indexingfiltermarshaler.cs
- WebPartCloseVerb.cs
- ManagementScope.cs
- WebEventTraceProvider.cs
- ClientSettings.cs
- CreateUserWizardDesigner.cs
- RepeatBehavior.cs
- Exceptions.cs
- Selector.cs
- XmlUtil.cs
- ECDsaCng.cs
- Point4DConverter.cs
- CheckBoxAutomationPeer.cs
- Reference.cs
- ControlCollection.cs
- FormsAuthentication.cs
- ListenDesigner.cs
- SqlXmlStorage.cs
- ToolboxItemFilterAttribute.cs
- MutableAssemblyCacheEntry.cs
- SeparatorAutomationPeer.cs
- ProfileBuildProvider.cs
- TimeSpanMinutesConverter.cs
- HGlobalSafeHandle.cs
- OdbcCommandBuilder.cs
- VarRemapper.cs
- Variant.cs
- FormsAuthenticationCredentials.cs
- IPAddress.cs
- SpotLight.cs
- TypeUnloadedException.cs
- EventLogPermissionEntryCollection.cs
- DocumentOrderQuery.cs
- GridViewUpdatedEventArgs.cs
- CheckPair.cs
- SrgsOneOf.cs
- MaskedTextBoxTextEditorDropDown.cs
- InfiniteTimeSpanConverter.cs
- QueueProcessor.cs
- WindowsEditBoxRange.cs
- List.cs
- MarginsConverter.cs
- APCustomTypeDescriptor.cs
- Brush.cs
- SmtpMail.cs
- SafeIUnknown.cs
- Converter.cs
- SwitchElementsCollection.cs
- AppSecurityManager.cs
- TextWriterTraceListener.cs
- UTF7Encoding.cs
- CapabilitiesRule.cs
- TransformerTypeCollection.cs
- PermissionListSet.cs
- WCFModelStrings.Designer.cs
- WebPartAuthorizationEventArgs.cs
- SystemKeyConverter.cs
- BrowserCapabilitiesCodeGenerator.cs