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
- DataSourceProvider.cs
- XmlDocumentSchema.cs
- KnownColorTable.cs
- SelectedGridItemChangedEvent.cs
- UriSchemeKeyedCollection.cs
- InternalConfigHost.cs
- PathSegment.cs
- SafeThreadHandle.cs
- SelectionItemPattern.cs
- TouchPoint.cs
- TextServicesDisplayAttribute.cs
- PackageDigitalSignatureManager.cs
- ControlDesigner.cs
- DataTableClearEvent.cs
- TextSelectionProcessor.cs
- Wizard.cs
- DesignerActionUIStateChangeEventArgs.cs
- IPipelineRuntime.cs
- SqlGatherProducedAliases.cs
- DocumentGrid.cs
- PropertyGeneratedEventArgs.cs
- PeerToPeerException.cs
- Style.cs
- Viewport2DVisual3D.cs
- Membership.cs
- ReservationNotFoundException.cs
- SqlComparer.cs
- MediaPlayer.cs
- SoapServerMessage.cs
- XmlStringTable.cs
- returneventsaver.cs
- serverconfig.cs
- SQLInt16.cs
- SchemaTableColumn.cs
- DataViewSetting.cs
- HMACSHA1.cs
- UserControlParser.cs
- AuthorizationBehavior.cs
- DesignTimeXamlWriter.cs
- XmlTextReaderImpl.cs
- TimeIntervalCollection.cs
- NullToBooleanConverter.cs
- BindingValueChangedEventArgs.cs
- StorageAssociationTypeMapping.cs
- JavaScriptString.cs
- DynamicDiscoSearcher.cs
- DataSourceXmlTextReader.cs
- BypassElement.cs
- QueryExecutionOption.cs
- TextProperties.cs
- UshortList2.cs
- FixedTextView.cs
- ProxyAttribute.cs
- StylusDownEventArgs.cs
- ExpressionTextBox.xaml.cs
- DataContractSet.cs
- panel.cs
- WaitingCursor.cs
- SafeLocalMemHandle.cs
- SchemaAttDef.cs
- XmlParserContext.cs
- SqlAliasesReferenced.cs
- Vector.cs
- HandlerElement.cs
- KnowledgeBase.cs
- SHA256.cs
- CaseExpr.cs
- ButtonColumn.cs
- PropertyNames.cs
- PerformanceCounter.cs
- EntityViewContainer.cs
- HebrewNumber.cs
- DelayDesigner.cs
- InvalidContentTypeException.cs
- Compress.cs
- ListViewGroupCollectionEditor.cs
- MenuEventArgs.cs
- Stream.cs
- XPathParser.cs
- DrawingGroupDrawingContext.cs
- BrowserCapabilitiesCompiler.cs
- JsonByteArrayDataContract.cs
- SystemBrushes.cs
- WindowsListViewItemCheckBox.cs
- COSERVERINFO.cs
- TextPenaltyModule.cs
- MouseActionValueSerializer.cs
- QilTypeChecker.cs
- HTMLTagNameToTypeMapper.cs
- PathSegment.cs
- WSFederationHttpSecurityElement.cs
- ThousandthOfEmRealDoubles.cs
- InstanceDescriptor.cs
- MetafileEditor.cs
- TableCellAutomationPeer.cs
- ComPlusTypeValidator.cs
- FrameSecurityDescriptor.cs
- EmbeddedMailObject.cs
- GenericXmlSecurityToken.cs
- LambdaCompiler.Generated.cs