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
- CellNormalizer.cs
- AnnotationResource.cs
- EdmTypeAttribute.cs
- DES.cs
- Interlocked.cs
- CanonicalFontFamilyReference.cs
- PropertyEntry.cs
- CreateUserWizard.cs
- SettingsAttributeDictionary.cs
- CounterSet.cs
- SchemaElementLookUpTableEnumerator.cs
- LifetimeServices.cs
- _NestedSingleAsyncResult.cs
- TransformConverter.cs
- DataGridPagingPage.cs
- SizeFConverter.cs
- indexingfiltermarshaler.cs
- TextDpi.cs
- AuthorizationRuleCollection.cs
- LongValidator.cs
- PatternMatcher.cs
- SerialErrors.cs
- XNodeValidator.cs
- mediaclock.cs
- DocumentSchemaValidator.cs
- WebServicesSection.cs
- ListViewUpdatedEventArgs.cs
- TokenBasedSetEnumerator.cs
- PaintValueEventArgs.cs
- PrePrepareMethodAttribute.cs
- XmlSchemaSimpleContent.cs
- CharEntityEncoderFallback.cs
- TrustManager.cs
- WmiEventSink.cs
- NameTable.cs
- RequestContextBase.cs
- ButtonChrome.cs
- Bitmap.cs
- CodeBinaryOperatorExpression.cs
- WorkflowFileItem.cs
- BinaryWriter.cs
- ServiceDesigner.xaml.cs
- EntityParameterCollection.cs
- SerializerDescriptor.cs
- BindingOperations.cs
- QuaternionValueSerializer.cs
- CompilerGeneratedAttribute.cs
- TriggerActionCollection.cs
- SqlUtil.cs
- WindowsButton.cs
- DataControlFieldHeaderCell.cs
- BitmapMetadata.cs
- ObjectQuery.cs
- Matrix.cs
- Pen.cs
- JavascriptCallbackBehaviorAttribute.cs
- CurrentTimeZone.cs
- AsyncResult.cs
- DataRowCollection.cs
- SharedDp.cs
- PageClientProxyGenerator.cs
- OrderedDictionary.cs
- AttributeUsageAttribute.cs
- ContainerAction.cs
- ChangeConflicts.cs
- LocatorPart.cs
- OdbcConnectionHandle.cs
- CopyNamespacesAction.cs
- ConfigurationStrings.cs
- CompilerError.cs
- HebrewCalendar.cs
- WebPermission.cs
- TypeSchema.cs
- Substitution.cs
- EntityDataSourceChangingEventArgs.cs
- HwndStylusInputProvider.cs
- ConvertEvent.cs
- HtmlButton.cs
- TextViewDesigner.cs
- COM2ExtendedUITypeEditor.cs
- Model3D.cs
- ImageFormatConverter.cs
- AsnEncodedData.cs
- DurableTimerExtension.cs
- TemplateField.cs
- ping.cs
- BooleanProjectedSlot.cs
- ContextMenuStripActionList.cs
- XmlAttributes.cs
- Message.cs
- Int32AnimationBase.cs
- Errors.cs
- VoiceSynthesis.cs
- SqlParameterizer.cs
- DispatcherSynchronizationContext.cs
- RotateTransform.cs
- ProfileGroupSettings.cs
- DataContractSerializerOperationGenerator.cs
- NullExtension.cs
- ClientTarget.cs