Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- MultiBinding.cs
- MimeMapping.cs
- ItemContainerProviderWrapper.cs
- RelationshipType.cs
- SourceInterpreter.cs
- SQLConvert.cs
- TemplatedMailWebEventProvider.cs
- DataServices.cs
- PseudoWebRequest.cs
- DefaultPrintController.cs
- PolygonHotSpot.cs
- TextViewElement.cs
- GridViewActionList.cs
- BaseCollection.cs
- ApplyTemplatesAction.cs
- COAUTHINFO.cs
- WebPartEditorOkVerb.cs
- BitArray.cs
- AdjustableArrowCap.cs
- KeyBinding.cs
- OpacityConverter.cs
- Int32Storage.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- XComponentModel.cs
- SchemaLookupTable.cs
- TimeIntervalCollection.cs
- CompilerTypeWithParams.cs
- RequestValidator.cs
- ProfileServiceManager.cs
- PermissionAttributes.cs
- Repeater.cs
- HelpEvent.cs
- ResponseStream.cs
- UnitySerializationHolder.cs
- DirtyTextRange.cs
- TemplatePagerField.cs
- QueryConverter.cs
- CodeMemberField.cs
- ToolbarAUtomationPeer.cs
- KeyConverter.cs
- DataColumn.cs
- ImpersonateTokenRef.cs
- SqlXml.cs
- NumberSubstitution.cs
- PtsContext.cs
- IteratorDescriptor.cs
- UpdateException.cs
- TextDocumentView.cs
- UnmanagedHandle.cs
- WsdlBuildProvider.cs
- QueryException.cs
- TextParagraphProperties.cs
- WmlPanelAdapter.cs
- UriSection.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- CaseCqlBlock.cs
- WorkflowInstanceExtensionCollection.cs
- PointConverter.cs
- FigureHelper.cs
- TraceEventCache.cs
- MSG.cs
- StylusPointPropertyInfoDefaults.cs
- FixedFindEngine.cs
- DbReferenceCollection.cs
- WebServiceHandler.cs
- ImageMapEventArgs.cs
- DragEvent.cs
- IssuedTokenServiceElement.cs
- BindingListCollectionView.cs
- Underline.cs
- TransformCryptoHandle.cs
- GridEntry.cs
- PipeException.cs
- WorkflowQueuingService.cs
- XmlILIndex.cs
- WsdlHelpGeneratorElement.cs
- SecureStringHasher.cs
- FirstMatchCodeGroup.cs
- TypeDependencyAttribute.cs
- OptimalBreakSession.cs
- SpellerInterop.cs
- SplitContainer.cs
- RijndaelManagedTransform.cs
- AssociationSet.cs
- DocumentViewerAutomationPeer.cs
- TextFormatterHost.cs
- EnvironmentPermission.cs
- ServiceOperationListItemList.cs
- XmlSerializerVersionAttribute.cs
- XmlHierarchicalDataSourceView.cs
- XmlText.cs
- ThemeableAttribute.cs
- SyndicationSerializer.cs
- ProxyGenerator.cs
- WebPageTraceListener.cs
- StreamResourceInfo.cs
- BridgeDataRecord.cs
- ChildChangedEventArgs.cs
- RegistrationServices.cs
- ObjRef.cs