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
- AdornerLayer.cs
- X509CertificateStore.cs
- SqlGenericUtil.cs
- GroupAggregateExpr.cs
- Attributes.cs
- MailDefinitionBodyFileNameEditor.cs
- BamlBinaryReader.cs
- ToolStripDropDownDesigner.cs
- ToolboxSnapDragDropEventArgs.cs
- ListSortDescriptionCollection.cs
- RoleManagerEventArgs.cs
- DemultiplexingClientMessageFormatter.cs
- ElementUtil.cs
- CapabilitiesPattern.cs
- ContractMapping.cs
- DesignerSerializerAttribute.cs
- NullableDecimalSumAggregationOperator.cs
- ContentPresenter.cs
- ModelPerspective.cs
- XmlDataSource.cs
- PageFunction.cs
- InvalidProgramException.cs
- AttachedProperty.cs
- TypeDescriptionProvider.cs
- FullTrustAssembly.cs
- StrokeNodeOperations.cs
- XPathDocument.cs
- Condition.cs
- TableTextElementCollectionInternal.cs
- CompModSwitches.cs
- DynamicRouteExpression.cs
- MessageQueueConverter.cs
- TypeElement.cs
- DataGridViewRowsAddedEventArgs.cs
- DataListItemCollection.cs
- MemoryMappedFileSecurity.cs
- DataBoundControlAdapter.cs
- Intellisense.cs
- CryptoProvider.cs
- NumberFormatInfo.cs
- TimeSpanParse.cs
- DataListGeneralPage.cs
- CompensationDesigner.cs
- _ContextAwareResult.cs
- DataGridPageChangedEventArgs.cs
- Image.cs
- TransactionScopeDesigner.cs
- WebEvents.cs
- WbmpConverter.cs
- _OSSOCK.cs
- Comparer.cs
- SessionStateItemCollection.cs
- NetworkInformationPermission.cs
- UnsafeNativeMethods.cs
- CodeEventReferenceExpression.cs
- TransformValueSerializer.cs
- InternalPolicyElement.cs
- TraceLog.cs
- UnauthorizedAccessException.cs
- TemplateModeChangedEventArgs.cs
- EnumerableRowCollectionExtensions.cs
- ChameleonKey.cs
- XmlSecureResolver.cs
- NamespaceList.cs
- AudioException.cs
- PropertyContainer.cs
- Parsers.cs
- ConstantProjectedSlot.cs
- KeyValueConfigurationElement.cs
- input.cs
- SiteMapDataSourceView.cs
- CodePageEncoding.cs
- ConsumerConnectionPoint.cs
- CodeDirectionExpression.cs
- StrongNamePublicKeyBlob.cs
- LambdaCompiler.Statements.cs
- WebPartTransformerCollection.cs
- SemanticBasicElement.cs
- BitStack.cs
- CannotUnloadAppDomainException.cs
- WebCodeGenerator.cs
- ComponentResourceManager.cs
- JournalEntry.cs
- RegexCompilationInfo.cs
- _UriTypeConverter.cs
- MultiTouchSystemGestureLogic.cs
- StandardTransformFactory.cs
- CharStorage.cs
- DirectionalLight.cs
- RadioButton.cs
- ConfigurationManager.cs
- HandlerBase.cs
- IProvider.cs
- DebugControllerThread.cs
- GroupDescription.cs
- HtmlTableCellCollection.cs
- XPathArrayIterator.cs
- PtsHost.cs
- VideoDrawing.cs
- ClientSettingsSection.cs