Code:
/ 4.0 / 4.0 / 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.
//----------------------------------------------------------------------
//
// 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
- AutomationProperty.cs
- DockProviderWrapper.cs
- SystemTcpStatistics.cs
- InspectionWorker.cs
- DynamicField.cs
- HtmlForm.cs
- Screen.cs
- NumericExpr.cs
- initElementDictionary.cs
- XhtmlBasicLinkAdapter.cs
- TraceSection.cs
- CaseCqlBlock.cs
- HttpGetServerProtocol.cs
- SqlException.cs
- UndoEngine.cs
- WinCategoryAttribute.cs
- ToolBarButtonDesigner.cs
- Utils.cs
- VisualTarget.cs
- oledbmetadatacollectionnames.cs
- HtmlTableRow.cs
- OleStrCAMarshaler.cs
- StringHelper.cs
- DynamicHyperLink.cs
- InvalidWMPVersionException.cs
- FormatterServicesNoSerializableCheck.cs
- FontStretches.cs
- FontFamilyConverter.cs
- GridViewColumnHeaderAutomationPeer.cs
- XmlSchemaImporter.cs
- AdapterDictionary.cs
- DataGridViewCellStateChangedEventArgs.cs
- ParseNumbers.cs
- XPathNodeHelper.cs
- WebPartConnectionCollection.cs
- UIPermission.cs
- FilteredAttributeCollection.cs
- StylusCaptureWithinProperty.cs
- EnvironmentPermission.cs
- StrokeIntersection.cs
- CompilerCollection.cs
- Scene3D.cs
- SqlRowUpdatedEvent.cs
- TcpTransportBindingElement.cs
- FileAuthorizationModule.cs
- HttpRequestCacheValidator.cs
- Rect3DValueSerializer.cs
- DataGridViewLayoutData.cs
- SafeLocalMemHandle.cs
- SimpleBitVector32.cs
- Psha1DerivedKeyGenerator.cs
- RowToParametersTransformer.cs
- BitmapEffectInputData.cs
- CellRelation.cs
- DataGridViewButtonCell.cs
- NativeCppClassAttribute.cs
- EntityStoreSchemaFilterEntry.cs
- QueryAccessibilityHelpEvent.cs
- WebPartConnectionCollection.cs
- GeometryGroup.cs
- TreeNodeBinding.cs
- Cursors.cs
- HeaderedContentControl.cs
- AdapterDictionary.cs
- HuffmanTree.cs
- HttpDigestClientElement.cs
- CodeNamespaceImportCollection.cs
- XmlNode.cs
- VerificationAttribute.cs
- WasHostedComPlusFactory.cs
- BuildManager.cs
- DataGridViewCheckBoxColumn.cs
- StylusButton.cs
- ObsoleteAttribute.cs
- JoinCqlBlock.cs
- HttpModulesSection.cs
- XmlHierarchicalDataSourceView.cs
- CompensationHandlingFilter.cs
- RoleServiceManager.cs
- CodeTypeDeclaration.cs
- LayoutEditorPart.cs
- OrCondition.cs
- PersistenceTypeAttribute.cs
- ChildrenQuery.cs
- CodeTypeDeclaration.cs
- RangeValidator.cs
- WebBrowserContainer.cs
- TextEndOfSegment.cs
- TrackingRecordPreFilter.cs
- OrderPreservingMergeHelper.cs
- MatrixCamera.cs
- ConfigurationHelpers.cs
- CompilationUtil.cs
- UnitySerializationHolder.cs
- TypeElement.cs
- QuaternionConverter.cs
- UserControlParser.cs
- CommentEmitter.cs
- CompModSwitches.cs
- ComNativeDescriptor.cs