Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CharStorage.cs
- Image.cs
- PreloadedPackages.cs
- TargetException.cs
- SQLDateTime.cs
- ToolStripItemClickedEventArgs.cs
- PreviewPrintController.cs
- MetadataItemEmitter.cs
- TextTabProperties.cs
- LeaseManager.cs
- MissingMethodException.cs
- PartitionedDataSource.cs
- PointAnimationBase.cs
- PersonalizationStateQuery.cs
- ISessionStateStore.cs
- XmlLanguageConverter.cs
- XmlAttributeOverrides.cs
- InvalidEnumArgumentException.cs
- WorkflowOperationErrorHandler.cs
- StreamResourceInfo.cs
- CompoundFileStorageReference.cs
- EnumBuilder.cs
- SelectionRangeConverter.cs
- TableItemProviderWrapper.cs
- BitmapPalettes.cs
- StrokeIntersection.cs
- Pens.cs
- SourceChangedEventArgs.cs
- DataGridViewRowConverter.cs
- COM2ComponentEditor.cs
- PasswordTextContainer.cs
- KeyFrames.cs
- InvokePatternIdentifiers.cs
- FileUpload.cs
- CommandDevice.cs
- IxmlLineInfo.cs
- EventHandlingScope.cs
- HtmlImage.cs
- OpenTypeLayout.cs
- Buffer.cs
- IIS7UserPrincipal.cs
- ItemList.cs
- SystemIPv6InterfaceProperties.cs
- PageRouteHandler.cs
- SystemTcpStatistics.cs
- MonthChangedEventArgs.cs
- AppDomain.cs
- OperationAbortedException.cs
- ReferenceService.cs
- SecurityPermission.cs
- PlaceHolder.cs
- _LoggingObject.cs
- MappingException.cs
- SymbolEqualComparer.cs
- ElementProxy.cs
- PeerNodeAddress.cs
- CodeArrayCreateExpression.cs
- AtomPub10ServiceDocumentFormatter.cs
- RoutingExtensionElement.cs
- TypeSystem.cs
- IISUnsafeMethods.cs
- DataStorage.cs
- XmlSubtreeReader.cs
- XamlWriterExtensions.cs
- FixUp.cs
- SynchronizingStream.cs
- assertwrapper.cs
- PageTextBox.cs
- GeneratedView.cs
- AssemblyNameProxy.cs
- OletxResourceManager.cs
- HandlerMappingMemo.cs
- ModifyActivitiesPropertyDescriptor.cs
- SiteMapNodeCollection.cs
- ParameterModifier.cs
- ListViewContainer.cs
- DbProviderFactories.cs
- PartialCachingAttribute.cs
- Viewport2DVisual3D.cs
- HtmlElementCollection.cs
- DriveNotFoundException.cs
- RangeBaseAutomationPeer.cs
- ReadContentAsBinaryHelper.cs
- BooleanConverter.cs
- MdiWindowListItemConverter.cs
- VirtualDirectoryMapping.cs
- ObjectDataSourceSelectingEventArgs.cs
- ElementHostPropertyMap.cs
- PassportIdentity.cs
- LinqDataSourceDeleteEventArgs.cs
- TemplateControlBuildProvider.cs
- QfeChecker.cs
- ValidatorCollection.cs
- QueryStringHandler.cs
- VirtualizingStackPanel.cs
- DesignerSelectionListAdapter.cs
- ImageCodecInfoPrivate.cs
- StringStorage.cs
- SqlGenerator.cs
- DropDownList.cs