Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataWeb / Design / system / Data / EntityModel / Emitters / PropertyEmitterBase.cs / 3 / 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.Data.Services.Design; using System.Diagnostics; 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(Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Internal", "Protected"), ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict, EdmSchemaErrorSeverity.Error); } else if (PropertyEmitter.GetGetterAccessibility(Item) == MemberAttributes.Family && PropertyEmitter.GetSetterAccessibility(Item) == MemberAttributes.Assembly) { Generator.AddError(Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Protected", "Internal"), ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict, EdmSchemaErrorSeverity.Error); } } ////// 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.Data.Services.Design; using System.Diagnostics; 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(Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Internal", "Protected"), ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict, EdmSchemaErrorSeverity.Error); } else if (PropertyEmitter.GetGetterAccessibility(Item) == MemberAttributes.Family && PropertyEmitter.GetSetterAccessibility(Item) == MemberAttributes.Assembly) { Generator.AddError(Strings.GeneratedPropertyAccessibilityConflict(Item.Name, "Protected", "Internal"), ModelBuilderErrorCode.GeneratedPropertyAccessibilityConflict, EdmSchemaErrorSeverity.Error); } } ////// 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
- DataStreamFromComStream.cs
- ActiveXSerializer.cs
- AttachedAnnotationChangedEventArgs.cs
- BuildProvider.cs
- KeyFrames.cs
- UIElement.cs
- AdornerPresentationContext.cs
- NativeMethods.cs
- InputBuffer.cs
- LayoutTable.cs
- ProfileManager.cs
- SolidColorBrush.cs
- CodeSnippetExpression.cs
- MenuStrip.cs
- ButtonBase.cs
- InputEventArgs.cs
- SecurityContextKeyIdentifierClause.cs
- dbenumerator.cs
- WindowHideOrCloseTracker.cs
- __ComObject.cs
- NetworkAddressChange.cs
- ClassHandlersStore.cs
- DataFieldConverter.cs
- WebZone.cs
- PointLightBase.cs
- DataGridViewSelectedColumnCollection.cs
- DataGridBoolColumn.cs
- StreamWithDictionary.cs
- _RegBlobWebProxyDataBuilder.cs
- ProviderUtil.cs
- TypedReference.cs
- InputLanguageProfileNotifySink.cs
- PropertyStore.cs
- ColumnCollection.cs
- KeyboardEventArgs.cs
- UpDownEvent.cs
- TemplatedAdorner.cs
- UserControl.cs
- Point4D.cs
- WhiteSpaceTrimStringConverter.cs
- PropertyReference.cs
- XmlNodeReader.cs
- DataGridComponentEditor.cs
- FieldDescriptor.cs
- ExceptionNotification.cs
- Utils.cs
- StandardCommandToolStripMenuItem.cs
- OrCondition.cs
- AutoCompleteStringCollection.cs
- RegexNode.cs
- ResourceExpressionBuilder.cs
- ServerProtocol.cs
- FontDialog.cs
- DependencyPropertyHelper.cs
- DataGridAddNewRow.cs
- DataFormat.cs
- DSASignatureDeformatter.cs
- PreviewKeyDownEventArgs.cs
- GridItemPattern.cs
- DefaultBinder.cs
- TargetInvocationException.cs
- FunctionImportElement.cs
- MonthCalendar.cs
- ConnectionInterfaceCollection.cs
- XamlSerializer.cs
- FieldNameLookup.cs
- LassoHelper.cs
- ImageProxy.cs
- SignedPkcs7.cs
- Exception.cs
- XmlDownloadManager.cs
- LinkTarget.cs
- Array.cs
- Memoizer.cs
- AdornerDecorator.cs
- IISMapPath.cs
- EmbeddedMailObjectsCollection.cs
- ApplicationId.cs
- StorageComplexTypeMapping.cs
- PresentationAppDomainManager.cs
- log.cs
- ChannelSinkStacks.cs
- TextContainerChangeEventArgs.cs
- FilteredDataSetHelper.cs
- securitymgrsite.cs
- WebPartZoneBase.cs
- XmlConverter.cs
- PngBitmapDecoder.cs
- SqlCacheDependencyDatabaseCollection.cs
- FrameDimension.cs
- TableRowGroupCollection.cs
- DebugController.cs
- EntityCollection.cs
- XmlCustomFormatter.cs
- HttpWebRequestElement.cs
- DelegatingTypeDescriptionProvider.cs
- AllMembershipCondition.cs
- TagMapCollection.cs
- TabletDevice.cs
- ToolStripStatusLabel.cs