You've already forked linux-packaging-mono
Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
113
external/referencesource/System.Web/UI/RootBuilder.cs
vendored
Normal file
113
external/referencesource/System.Web/UI/RootBuilder.cs
vendored
Normal file
@ -0,0 +1,113 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="RootBuilder.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
* Implements the root builder
|
||||
*
|
||||
* Copyright (c) 1998 Microsoft Corporation
|
||||
*/
|
||||
|
||||
namespace System.Web.UI {
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Web;
|
||||
using System.Web.Util;
|
||||
|
||||
/// <internalonly/>
|
||||
/// <devdoc>
|
||||
/// <para>[To be supplied.]</para>
|
||||
/// </devdoc>
|
||||
public class RootBuilder : TemplateBuilder {
|
||||
private MainTagNameToTypeMapper _typeMapper;
|
||||
|
||||
// Contains a mapping of all objects to their associated builders
|
||||
private IDictionary _builtObjects;
|
||||
|
||||
|
||||
public RootBuilder() {
|
||||
}
|
||||
|
||||
|
||||
/// <devdoc>
|
||||
/// <para>[To be supplied.]</para>
|
||||
/// </devdoc>
|
||||
public RootBuilder(TemplateParser parser) {
|
||||
}
|
||||
|
||||
public IDictionary BuiltObjects {
|
||||
get {
|
||||
// Store any objects created by this control builder
|
||||
// so we can properly persist items
|
||||
if (_builtObjects == null) {
|
||||
_builtObjects = new Hashtable(ReferenceKeyComparer.Default);
|
||||
}
|
||||
return _builtObjects;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The method gets called when the CodeDom tree is fully built. The way it is used is by first overriding
|
||||
/// ProcessGeneratedCode to keep track of the CodeCompileUnit, and to then have the ability to modify
|
||||
/// the CodeCompileUnit in this method
|
||||
/// </summary>
|
||||
protected internal virtual void OnCodeGenerationComplete() {
|
||||
}
|
||||
|
||||
internal void SetTypeMapper(MainTagNameToTypeMapper typeMapper) {
|
||||
_typeMapper = typeMapper;
|
||||
}
|
||||
|
||||
|
||||
/// <devdoc>
|
||||
/// <para>[To be supplied.]</para>
|
||||
/// </devdoc>
|
||||
public override Type GetChildControlType(string tagName,
|
||||
IDictionary attribs) {
|
||||
// Is there a type to handle this control
|
||||
Type type = _typeMapper.GetControlType(tagName, attribs,
|
||||
true /*fAllowHtmlTags*/);
|
||||
|
||||
return type;
|
||||
}
|
||||
|
||||
internal override void PrepareNoCompilePageSupport() {
|
||||
base.PrepareNoCompilePageSupport();
|
||||
|
||||
// This is needed to break any connection with the TemplateParser, allowing it
|
||||
// to be fully collected when the parsing is complete
|
||||
_typeMapper = null;
|
||||
}
|
||||
|
||||
private class ReferenceKeyComparer : IComparer, IEqualityComparer {
|
||||
internal static readonly ReferenceKeyComparer Default = new ReferenceKeyComparer();
|
||||
|
||||
bool IEqualityComparer.Equals(object x, object y) {
|
||||
return Object.ReferenceEquals(x, y);
|
||||
}
|
||||
|
||||
int IEqualityComparer.GetHashCode(object obj) {
|
||||
return obj.GetHashCode();
|
||||
}
|
||||
|
||||
int IComparer.Compare(object x, object y) {
|
||||
if (Object.ReferenceEquals(x, y)) {
|
||||
return 0;
|
||||
}
|
||||
if (x == null) {
|
||||
return -1;
|
||||
}
|
||||
if (y == null) {
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user