Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataEntityDesign / 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.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
- BinaryReader.cs
- DataControlExtensions.cs
- validation.cs
- Blend.cs
- NullableLongAverageAggregationOperator.cs
- WorkflowDefinitionDispenser.cs
- BrowserTree.cs
- DataErrorValidationRule.cs
- BinaryQueryOperator.cs
- Transform3DGroup.cs
- SourceFileBuildProvider.cs
- GridSplitterAutomationPeer.cs
- messageonlyhwndwrapper.cs
- VariableAction.cs
- WindowInteractionStateTracker.cs
- securitycriticaldataformultiplegetandset.cs
- StringUtil.cs
- PerfCounters.cs
- CompilerGeneratedAttribute.cs
- MarkupExtensionParser.cs
- DynamicControlParameter.cs
- _LocalDataStore.cs
- FastEncoder.cs
- HelpProvider.cs
- Size.cs
- JsonEnumDataContract.cs
- TraceHelpers.cs
- DataGridHelper.cs
- SortFieldComparer.cs
- OleDbErrorCollection.cs
- HtmlEmptyTagControlBuilder.cs
- EntitySqlQueryCacheEntry.cs
- LogicalChannelCollection.cs
- VisualCollection.cs
- PointCollection.cs
- Types.cs
- Button.cs
- ZipIOExtraFieldPaddingElement.cs
- SystemNetworkInterface.cs
- MetadataArtifactLoaderCompositeResource.cs
- baseshape.cs
- NavigationWindowAutomationPeer.cs
- QuadraticBezierSegment.cs
- RequestCachePolicy.cs
- DbConnectionInternal.cs
- ValidatingReaderNodeData.cs
- ProcessRequestArgs.cs
- DataControlFieldCollection.cs
- WizardForm.cs
- webeventbuffer.cs
- IERequestCache.cs
- ClosableStream.cs
- ServerIdentity.cs
- ObjectCloneHelper.cs
- TypefaceCollection.cs
- InkPresenterAutomationPeer.cs
- ToolStripOverflowButton.cs
- ScriptResourceInfo.cs
- ProfilePropertyNameValidator.cs
- NullableDecimalMinMaxAggregationOperator.cs
- ToolStripItemDataObject.cs
- SystemColors.cs
- WpfXamlLoader.cs
- InkCanvas.cs
- BinaryHeap.cs
- Expressions.cs
- DrawingAttributeSerializer.cs
- XamlFigureLengthSerializer.cs
- TypedElement.cs
- IssuedTokenClientBehaviorsElementCollection.cs
- SapiGrammar.cs
- DataControlCommands.cs
- ListSortDescription.cs
- ServiceNameElementCollection.cs
- InputLanguageManager.cs
- MatrixConverter.cs
- Matrix3DValueSerializer.cs
- EntitySet.cs
- ChangeProcessor.cs
- ServerIdentity.cs
- RegexCode.cs
- ConfigXmlDocument.cs
- PropertyChangedEventArgs.cs
- BamlMapTable.cs
- EventMappingSettingsCollection.cs
- AmbientLight.cs
- ListQueryResults.cs
- BaseResourcesBuildProvider.cs
- ZoomPercentageConverter.cs
- DataGridViewHitTestInfo.cs
- OracleBoolean.cs
- WindowsSolidBrush.cs
- Marshal.cs
- Utils.cs
- DrawListViewItemEventArgs.cs
- TypeGeneratedEventArgs.cs
- SystemIPv4InterfaceProperties.cs
- VirtualDirectoryMappingCollection.cs
- RefExpr.cs
- PrintPageEvent.cs