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
- DrawingVisualDrawingContext.cs
- CurrentChangedEventManager.cs
- CollaborationHelperFunctions.cs
- ModifierKeysConverter.cs
- SystemUdpStatistics.cs
- XmlDocumentFragment.cs
- BaseCAMarshaler.cs
- WaitHandle.cs
- ExpressionBindingsDialog.cs
- StringBlob.cs
- COAUTHINFO.cs
- FormsIdentity.cs
- AdapterDictionary.cs
- CalloutQueueItem.cs
- XPathNodeList.cs
- ProcessStartInfo.cs
- Rfc2898DeriveBytes.cs
- ProjectedSlot.cs
- WebGetAttribute.cs
- WindowsListViewGroupSubsetLink.cs
- ContentPosition.cs
- LocalizableResourceBuilder.cs
- CaseCqlBlock.cs
- XmlText.cs
- ProviderConnectionPointCollection.cs
- CustomSignedXml.cs
- Timer.cs
- HttpApplication.cs
- XamlBuildTaskServices.cs
- IconConverter.cs
- TextTreeFixupNode.cs
- Queue.cs
- DataMemberAttribute.cs
- LexicalChunk.cs
- WebPartZoneDesigner.cs
- ListItemConverter.cs
- DocumentGridPage.cs
- DataGridHeaderBorder.cs
- XmlRootAttribute.cs
- PropertyGrid.cs
- ConfigurationPermission.cs
- EntityDataSourceDataSelection.cs
- PackagePart.cs
- SerializerWriterEventHandlers.cs
- ADRole.cs
- RangeValuePattern.cs
- SByte.cs
- RuntimeConfig.cs
- DataSourceHelper.cs
- XsltSettings.cs
- XmlStreamStore.cs
- XmlToDatasetMap.cs
- mansign.cs
- PagesSection.cs
- GridViewRowEventArgs.cs
- MULTI_QI.cs
- SystemParameters.cs
- OleDbFactory.cs
- InlineUIContainer.cs
- InstanceCreationEditor.cs
- DeferredBinaryDeserializerExtension.cs
- __Error.cs
- FacetDescription.cs
- ClientFormsIdentity.cs
- DocumentCollection.cs
- ObjectCloneHelper.cs
- login.cs
- XmlSchemaCompilationSettings.cs
- PropertyEmitterBase.cs
- webeventbuffer.cs
- DataGridViewUtilities.cs
- TransformerInfo.cs
- PageParserFilter.cs
- NavigationProperty.cs
- ListViewHitTestInfo.cs
- SettingsProperty.cs
- CommandLibraryHelper.cs
- UIElement3DAutomationPeer.cs
- ManifestResourceInfo.cs
- IntSecurity.cs
- RectValueSerializer.cs
- ToolboxItemSnapLineBehavior.cs
- TextEditorTables.cs
- DataReaderContainer.cs
- FirewallWrapper.cs
- RepeaterItem.cs
- Menu.cs
- FindCriteria11.cs
- RtfControls.cs
- ConfigurationStrings.cs
- ThreadStartException.cs
- InputLanguageSource.cs
- SaveLedgerEntryRequest.cs
- ObjectTypeMapping.cs
- DragDrop.cs
- NetMsmqBindingCollectionElement.cs
- MouseButton.cs
- DataSourceDescriptorCollection.cs
- DataBinding.cs
- ExecutedRoutedEventArgs.cs