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
- ListViewSortEventArgs.cs
- DataGridViewCellEventArgs.cs
- DataControlCommands.cs
- ExecutionContext.cs
- UIElementCollection.cs
- DataShape.cs
- DateTimeParse.cs
- HandlerFactoryCache.cs
- ReservationCollection.cs
- M3DUtil.cs
- TextServicesDisplayAttribute.cs
- XhtmlTextWriter.cs
- safex509handles.cs
- LambdaCompiler.Address.cs
- PolicyLevel.cs
- SqlLiftIndependentRowExpressions.cs
- AlignmentYValidation.cs
- AppDomainAttributes.cs
- XmlNodeReader.cs
- TemplateModeChangedEventArgs.cs
- ArglessEventHandlerProxy.cs
- PropertyMappingExceptionEventArgs.cs
- ResolveMatchesApril2005.cs
- XmlILTrace.cs
- ReaderWriterLock.cs
- RulePatternOps.cs
- CryptoKeySecurity.cs
- RoleGroupCollection.cs
- WeakReferenceList.cs
- SqlInternalConnection.cs
- Registry.cs
- ReadOnlyDictionary.cs
- HttpDateParse.cs
- SqlError.cs
- EventMap.cs
- TypeUsageBuilder.cs
- SqlInternalConnectionSmi.cs
- CreateInstanceBinder.cs
- DataBoundLiteralControl.cs
- DataFormats.cs
- Message.cs
- UMPAttributes.cs
- returneventsaver.cs
- AttachedAnnotationChangedEventArgs.cs
- RawStylusInput.cs
- SqlAliasesReferenced.cs
- RectAnimationClockResource.cs
- KeyedCollection.cs
- ButtonBase.cs
- TableFieldsEditor.cs
- AsyncOperationManager.cs
- Variable.cs
- ContractSearchPattern.cs
- LineServices.cs
- UndoManager.cs
- CssTextWriter.cs
- DbConnectionPoolOptions.cs
- RawStylusInputReport.cs
- KnowledgeBase.cs
- VerticalAlignConverter.cs
- IndentTextWriter.cs
- base64Transforms.cs
- EventBuilder.cs
- XPathNavigatorReader.cs
- MemoryStream.cs
- Codec.cs
- ExpressionNormalizer.cs
- FixedSOMTableCell.cs
- TemplateLookupAction.cs
- MruCache.cs
- TextRenderer.cs
- PreparingEnlistment.cs
- SelectionHighlightInfo.cs
- DataGridViewImageCell.cs
- FixedElement.cs
- AvtEvent.cs
- PieceNameHelper.cs
- WindowsIdentity.cs
- UnescapedXmlDiagnosticData.cs
- Win32.cs
- SoapFault.cs
- ObjectQueryState.cs
- RequestCacheEntry.cs
- DetailsViewPagerRow.cs
- TcpTransportManager.cs
- EventLogEntry.cs
- ToolStripPanel.cs
- VariableExpressionConverter.cs
- Vector3DAnimationUsingKeyFrames.cs
- QilIterator.cs
- StateDesigner.Helpers.cs
- HtmlTableCell.cs
- StrokeCollectionConverter.cs
- Selector.cs
- BufferedGraphicsManager.cs
- BrowserDefinition.cs
- SourceLocation.cs
- DoubleKeyFrameCollection.cs
- FlowLayoutSettings.cs
- ToolStripPanelRow.cs