Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Common / AuthoringOM / Compiler / TypeSystem / CodeDomLoader.cs / 1305376 / CodeDomLoader.cs
namespace System.Workflow.ComponentModel.Compiler
{
using System;
using System.CodeDom;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Diagnostics;
internal class CodeDomLoader: IDisposable
{
private TypeProvider typeProvider = null;
private CodeCompileUnit codeCompileUnit = null;
private List types = new List();
internal CodeDomLoader(TypeProvider typeProvider, CodeCompileUnit codeCompileUnit)
{
this.typeProvider = typeProvider;
this.codeCompileUnit = codeCompileUnit;
AddTypes();
}
internal void Refresh(EventHandler refresher)
{
RemoveTypes();
refresher(this.typeProvider, EventArgs.Empty);
AddTypes();
}
private void AddTypes()
{
if (this.typeProvider != null && this.types != null)
{
this.types.Clear();
foreach (CodeNamespace codeNamespace in this.codeCompileUnit.Namespaces)
{
foreach (CodeTypeDeclaration codeTypeDeclaration in codeNamespace.Types)
{
// Look for partial type
string typename = Helper.EnsureTypeName(codeTypeDeclaration.Name);
if(codeNamespace.Name.Length > 0)
typename = (Helper.EnsureTypeName(codeNamespace.Name) + "." + typename);
DesignTimeType partialType = this.typeProvider.GetType(typename, false) as DesignTimeType;
if ( partialType == null )
{
partialType = new DesignTimeType(null, codeTypeDeclaration.Name, codeNamespace.Imports, codeNamespace.Name, this.typeProvider);
this.types.Add(partialType);
this.typeProvider.AddType(partialType);
}
partialType.AddCodeTypeDeclaration(codeTypeDeclaration);
}
}
Queue nestedQueue = new Queue(this.types);
while (nestedQueue.Count != 0)
{
Type type = nestedQueue.Dequeue() as Type;
if(type.DeclaringType != null)
this.types.Add(type);
foreach (Type nestedType2 in type.GetNestedTypes(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
nestedQueue.Enqueue(nestedType2);
}
}
}
private void RemoveTypes()
{
if (this.typeProvider != null && this.types != null)
{
this.typeProvider.RemoveTypes(this.types.ToArray());
this.types.Clear();
}
}
#region IDisposable Members
public void Dispose()
{
RemoveTypes();
this.typeProvider = null;
this.types = null;
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
namespace System.Workflow.ComponentModel.Compiler
{
using System;
using System.CodeDom;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Diagnostics;
internal class CodeDomLoader: IDisposable
{
private TypeProvider typeProvider = null;
private CodeCompileUnit codeCompileUnit = null;
private List types = new List();
internal CodeDomLoader(TypeProvider typeProvider, CodeCompileUnit codeCompileUnit)
{
this.typeProvider = typeProvider;
this.codeCompileUnit = codeCompileUnit;
AddTypes();
}
internal void Refresh(EventHandler refresher)
{
RemoveTypes();
refresher(this.typeProvider, EventArgs.Empty);
AddTypes();
}
private void AddTypes()
{
if (this.typeProvider != null && this.types != null)
{
this.types.Clear();
foreach (CodeNamespace codeNamespace in this.codeCompileUnit.Namespaces)
{
foreach (CodeTypeDeclaration codeTypeDeclaration in codeNamespace.Types)
{
// Look for partial type
string typename = Helper.EnsureTypeName(codeTypeDeclaration.Name);
if(codeNamespace.Name.Length > 0)
typename = (Helper.EnsureTypeName(codeNamespace.Name) + "." + typename);
DesignTimeType partialType = this.typeProvider.GetType(typename, false) as DesignTimeType;
if ( partialType == null )
{
partialType = new DesignTimeType(null, codeTypeDeclaration.Name, codeNamespace.Imports, codeNamespace.Name, this.typeProvider);
this.types.Add(partialType);
this.typeProvider.AddType(partialType);
}
partialType.AddCodeTypeDeclaration(codeTypeDeclaration);
}
}
Queue nestedQueue = new Queue(this.types);
while (nestedQueue.Count != 0)
{
Type type = nestedQueue.Dequeue() as Type;
if(type.DeclaringType != null)
this.types.Add(type);
foreach (Type nestedType2 in type.GetNestedTypes(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic))
nestedQueue.Enqueue(nestedType2);
}
}
}
private void RemoveTypes()
{
if (this.typeProvider != null && this.types != null)
{
this.typeProvider.RemoveTypes(this.types.ToArray());
this.types.Clear();
}
}
#region IDisposable Members
public void Dispose()
{
RemoveTypes();
this.typeProvider = null;
this.types = null;
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ManagementEventArgs.cs
- SafeProcessHandle.cs
- OperatingSystemVersionCheck.cs
- RegistrationContext.cs
- SafeNativeMethodsOther.cs
- NameSpaceExtractor.cs
- InvalidCastException.cs
- SafeLibraryHandle.cs
- VirtualizingPanel.cs
- DesignerHierarchicalDataSourceView.cs
- BCLDebug.cs
- RenderDataDrawingContext.cs
- FormsAuthenticationConfiguration.cs
- XmlWriterDelegator.cs
- ConstantSlot.cs
- PermissionToken.cs
- StrokeNodeOperations2.cs
- IPGlobalProperties.cs
- DataGridViewElement.cs
- PathBox.cs
- CaretElement.cs
- ProjectedSlot.cs
- RoutedPropertyChangedEventArgs.cs
- NameTable.cs
- PhonemeEventArgs.cs
- ListViewCancelEventArgs.cs
- GridViewSortEventArgs.cs
- ColorConverter.cs
- LambdaCompiler.Unary.cs
- UTF7Encoding.cs
- StyleXamlParser.cs
- StylusPointPropertyId.cs
- GroupBoxRenderer.cs
- MenuItem.cs
- ColumnWidthChangingEvent.cs
- EntityDataSourceState.cs
- DataGridColumnFloatingHeader.cs
- ExtensionWindowHeader.cs
- SmiMetaData.cs
- EntityViewGenerationAttribute.cs
- NameValueFileSectionHandler.cs
- ContractMethodParameterInfo.cs
- DependencyPropertyAttribute.cs
- RegistrySecurity.cs
- MessageBox.cs
- XmlNodeChangedEventArgs.cs
- DateTimeFormatInfo.cs
- TextOnlyOutput.cs
- EnumerableCollectionView.cs
- PngBitmapEncoder.cs
- AuthorizationRule.cs
- CaseKeyBox.xaml.cs
- KnownAssembliesSet.cs
- ExtendedPropertyCollection.cs
- EmptyElement.cs
- ImportedNamespaceContextItem.cs
- AssertFilter.cs
- SqlDataSource.cs
- SafeBitVector32.cs
- TypedTableGenerator.cs
- MimeParameter.cs
- ADMembershipProvider.cs
- ExpressionBindingCollection.cs
- FastEncoder.cs
- SmiXetterAccessMap.cs
- PKCS1MaskGenerationMethod.cs
- BuildResult.cs
- DefaultObjectMappingItemCollection.cs
- CaretElement.cs
- HtmlInputRadioButton.cs
- RenderData.cs
- WebBrowserProgressChangedEventHandler.cs
- ContentPlaceHolder.cs
- Set.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- DesignerSerializationOptionsAttribute.cs
- ClickablePoint.cs
- CompressEmulationStream.cs
- _RequestCacheProtocol.cs
- FontClient.cs
- CompensableActivity.cs
- WorkflowIdleBehavior.cs
- Delay.cs
- SubMenuStyleCollectionEditor.cs
- PropertyValueChangedEvent.cs
- WeakReadOnlyCollection.cs
- LineInfo.cs
- TableItemPatternIdentifiers.cs
- DataPointer.cs
- DbDataRecord.cs
- QueryOutputWriterV1.cs
- remotingproxy.cs
- SimpleMailWebEventProvider.cs
- ApplicationSecurityInfo.cs
- XsdCachingReader.cs
- HWStack.cs
- DiscoveryProxy.cs
- XmlnsPrefixAttribute.cs
- ErrorRuntimeConfig.cs
- DataGridAutomationPeer.cs