Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- ControlEvent.cs
- SortableBindingList.cs
- PathSegment.cs
- DirectoryInfo.cs
- SrgsRule.cs
- SectionUpdates.cs
- TaskExceptionHolder.cs
- ManagedFilter.cs
- SubpageParaClient.cs
- SplitContainer.cs
- CodeValidator.cs
- DelegateInArgument.cs
- RegistrySecurity.cs
- ISO2022Encoding.cs
- ListItemParagraph.cs
- DrawingImage.cs
- BulletChrome.cs
- ZoneMembershipCondition.cs
- XNodeValidator.cs
- XPathAncestorQuery.cs
- ComboBoxRenderer.cs
- ProbeDuplexCD1AsyncResult.cs
- TimerElapsedEvenArgs.cs
- XmlWhitespace.cs
- TargetConverter.cs
- DesignerLabelAdapter.cs
- UpdatePanelTriggerCollection.cs
- Brushes.cs
- UrlMappingCollection.cs
- XmlReaderDelegator.cs
- TypeConverter.cs
- SqlCacheDependencyDatabase.cs
- ExceptionUtil.cs
- EntityProviderFactory.cs
- XmlSchemaAll.cs
- PenCursorManager.cs
- OleAutBinder.cs
- AmbiguousMatchException.cs
- ExpandedWrapper.cs
- PolicyChain.cs
- TextDecorationUnitValidation.cs
- ImageMetadata.cs
- ResourcesBuildProvider.cs
- IDQuery.cs
- SiteOfOriginContainer.cs
- SourceLineInfo.cs
- LinqDataView.cs
- _ContextAwareResult.cs
- ContentValidator.cs
- GetPageCompletedEventArgs.cs
- Crypto.cs
- XamlFxTrace.cs
- SecurityTokenSerializer.cs
- GetReadStreamResult.cs
- WindowsTitleBar.cs
- CroppedBitmap.cs
- UnhandledExceptionEventArgs.cs
- WindowCollection.cs
- SmiTypedGetterSetter.cs
- RevocationPoint.cs
- AnnotationResourceChangedEventArgs.cs
- PixelFormat.cs
- FontUnit.cs
- UnaryExpression.cs
- EncodingNLS.cs
- GradientBrush.cs
- CodeBlockBuilder.cs
- webclient.cs
- ColumnCollection.cs
- NameValueFileSectionHandler.cs
- DateBoldEvent.cs
- DynamicQueryableWrapper.cs
- InvalidDataException.cs
- FlowLayoutPanelDesigner.cs
- PropertyToken.cs
- ListControl.cs
- PropVariant.cs
- DataRecordInfo.cs
- ArraySet.cs
- ImplicitInputBrush.cs
- control.ime.cs
- SqlCommandSet.cs
- BlobPersonalizationState.cs
- InterleavedZipPartStream.cs
- SetIterators.cs
- AnnotationComponentManager.cs
- BaseTemplateBuildProvider.cs
- COMException.cs
- CodeSubDirectory.cs
- CharStorage.cs
- RegexGroupCollection.cs
- AnonymousIdentificationSection.cs
- HtmlMeta.cs
- Pair.cs
- VBIdentifierName.cs
- WebContentFormatHelper.cs
- PolicyVersion.cs
- TextEffect.cs
- LinkedResource.cs
- CacheRequest.cs