Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Design / system / Data / EntityModel / Emitters / PropertyEmitterBase.cs / 1305376 / PropertyEmitterBase.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System.CodeDom;
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
- Pen.cs
- CacheEntry.cs
- PropertyEmitter.cs
- MULTI_QI.cs
- PageThemeCodeDomTreeGenerator.cs
- SortableBindingList.cs
- Pointer.cs
- ListenUriMode.cs
- ConnectionOrientedTransportElement.cs
- autovalidator.cs
- WebPartConnectionsConfigureVerb.cs
- XamlInterfaces.cs
- ReflectionServiceProvider.cs
- SecurityContextTokenValidationException.cs
- HwndTarget.cs
- designeractionlistschangedeventargs.cs
- EDesignUtil.cs
- Matrix3D.cs
- FieldToken.cs
- RadioButton.cs
- EnumerableRowCollectionExtensions.cs
- SplitterCancelEvent.cs
- PageAsyncTaskManager.cs
- QuaternionConverter.cs
- FrameworkContentElementAutomationPeer.cs
- CreateUserWizardStep.cs
- FrameworkContentElement.cs
- ParameterModifier.cs
- MetadataUtil.cs
- AccessControlEntry.cs
- TreePrinter.cs
- OnOperation.cs
- InheritanceAttribute.cs
- PerformanceCounterNameAttribute.cs
- OrderedDictionaryStateHelper.cs
- SettingsProviderCollection.cs
- TransportContext.cs
- RemotingConfiguration.cs
- JapaneseCalendar.cs
- NonSerializedAttribute.cs
- DoubleCollectionConverter.cs
- XsltInput.cs
- CodeBlockBuilder.cs
- EntitySqlException.cs
- AssociationTypeEmitter.cs
- DataRowView.cs
- PropertyNames.cs
- EdmItemCollection.cs
- ObjectContext.cs
- ListManagerBindingsCollection.cs
- CustomAttribute.cs
- _StreamFramer.cs
- _TimerThread.cs
- ExternalFile.cs
- CustomError.cs
- ConditionalDesigner.cs
- WmpBitmapEncoder.cs
- ImageClickEventArgs.cs
- activationcontext.cs
- ParallelTimeline.cs
- MatrixCamera.cs
- XPathAncestorQuery.cs
- SvcMapFile.cs
- COM2Properties.cs
- Quad.cs
- LineGeometry.cs
- DoubleLink.cs
- ReliabilityContractAttribute.cs
- ExtensionWindow.cs
- templategroup.cs
- CodeGroup.cs
- DataGridViewDataConnection.cs
- LogRestartAreaEnumerator.cs
- WebScriptMetadataMessageEncoderFactory.cs
- GridViewDeletedEventArgs.cs
- DifferencingCollection.cs
- NonVisualControlAttribute.cs
- DesignTimeVisibleAttribute.cs
- DataGridViewDataConnection.cs
- HwndSource.cs
- DoubleAnimationUsingKeyFrames.cs
- DependencySource.cs
- XmlSchemaCollection.cs
- DurableRuntimeValidator.cs
- FontFamily.cs
- TemplateKey.cs
- SettingsAttributeDictionary.cs
- ReaderWriterLockWrapper.cs
- RegexCharClass.cs
- Parser.cs
- SqlHelper.cs
- MethodImplAttribute.cs
- DocumentViewer.cs
- SqlCrossApplyToCrossJoin.cs
- MarginCollapsingState.cs
- TrackingProfileDeserializationException.cs
- StylusPointPropertyId.cs
- ComponentDispatcherThread.cs
- EventMap.cs
- Types.cs