You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@@ -0,0 +1,317 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Workflow.ComponentModel.Compiler;
|
||||
using System.ComponentModel;
|
||||
using System.ComponentModel.Design.Serialization;
|
||||
using System.Workflow.ComponentModel.Serialization;
|
||||
using System.ComponentModel.Design;
|
||||
using System.Xml;
|
||||
using System.Diagnostics;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace System.Workflow.ComponentModel.Serialization
|
||||
{
|
||||
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
|
||||
public sealed class XmlnsDefinitionAttribute : Attribute
|
||||
{
|
||||
public XmlnsDefinitionAttribute(string xmlNamespace, string clrNamespace)
|
||||
{
|
||||
if (xmlNamespace == null)
|
||||
throw new ArgumentNullException("xmlNamespace");
|
||||
|
||||
if (clrNamespace == null)
|
||||
throw new ArgumentNullException("clrNamespace");
|
||||
|
||||
this.xmlNamespace = xmlNamespace;
|
||||
this.clrNamespace = clrNamespace;
|
||||
}
|
||||
public string XmlNamespace
|
||||
{
|
||||
get { return this.xmlNamespace; }
|
||||
}
|
||||
public string ClrNamespace
|
||||
{
|
||||
get { return this.clrNamespace; }
|
||||
}
|
||||
public string AssemblyName
|
||||
{
|
||||
get { return this.assemblyName; }
|
||||
set { this.assemblyName = value; }
|
||||
}
|
||||
|
||||
private string xmlNamespace;
|
||||
private string clrNamespace;
|
||||
private string assemblyName;
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
|
||||
public sealed class XmlnsPrefixAttribute : Attribute
|
||||
{
|
||||
private string xmlNamespace;
|
||||
private string prefix;
|
||||
|
||||
public XmlnsPrefixAttribute(string xmlNamespace, string prefix)
|
||||
{
|
||||
if (xmlNamespace == null)
|
||||
throw new ArgumentNullException("xmlNamespace");
|
||||
if (prefix == null)
|
||||
throw new ArgumentNullException("prefix");
|
||||
|
||||
this.xmlNamespace = xmlNamespace;
|
||||
this.prefix = prefix;
|
||||
}
|
||||
public string XmlNamespace
|
||||
{
|
||||
get { return this.xmlNamespace; }
|
||||
}
|
||||
public string Prefix
|
||||
{
|
||||
get { return this.prefix; }
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class)]
|
||||
public sealed class RuntimeNamePropertyAttribute : Attribute
|
||||
{
|
||||
private string name = null;
|
||||
public RuntimeNamePropertyAttribute(string name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
public string Name
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
|
||||
public sealed class ContentPropertyAttribute : Attribute
|
||||
{
|
||||
private string name;
|
||||
public ContentPropertyAttribute() { }
|
||||
public ContentPropertyAttribute(string name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
public string Name
|
||||
{
|
||||
get { return this.name; }
|
||||
}
|
||||
}
|
||||
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
|
||||
public sealed class ConstructorArgumentAttribute : Attribute
|
||||
{
|
||||
private string argumentName;
|
||||
|
||||
public ConstructorArgumentAttribute(string argumentName)
|
||||
{
|
||||
this.argumentName = argumentName;
|
||||
}
|
||||
public string ArgumentName
|
||||
{
|
||||
get { return this.argumentName; }
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class MarkupExtension
|
||||
{
|
||||
public abstract object ProvideValue(IServiceProvider provider);
|
||||
}
|
||||
|
||||
[DesignerSerializer(typeof(MarkupExtensionSerializer), typeof(WorkflowMarkupSerializer))]
|
||||
internal sealed class NullExtension : MarkupExtension
|
||||
{
|
||||
public NullExtension() { }
|
||||
public override object ProvideValue(IServiceProvider serviceProvider)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
[DesignerSerializer(typeof(TypeExtensionSerializer), typeof(WorkflowMarkupSerializer))]
|
||||
internal sealed class TypeExtension : MarkupExtension
|
||||
{
|
||||
private string typeName;
|
||||
private Type type;
|
||||
|
||||
public TypeExtension() { }
|
||||
|
||||
public TypeExtension(string type)
|
||||
{
|
||||
if (type == null)
|
||||
throw new ArgumentNullException("typeName");
|
||||
|
||||
this.typeName = type;
|
||||
}
|
||||
public TypeExtension(Type type)
|
||||
{
|
||||
if (type == null)
|
||||
throw new ArgumentNullException("type");
|
||||
|
||||
this.type = type;
|
||||
}
|
||||
public override object ProvideValue(IServiceProvider provider)
|
||||
{
|
||||
if (this.type != null)
|
||||
return this.type;
|
||||
|
||||
if (provider == null)
|
||||
throw new ArgumentNullException("provider");
|
||||
|
||||
if (this.typeName == null)
|
||||
throw new InvalidOperationException("typename");
|
||||
|
||||
WorkflowMarkupSerializationManager manager = provider as WorkflowMarkupSerializationManager;
|
||||
if (manager == null)
|
||||
throw new ArgumentNullException("provider");
|
||||
|
||||
XmlReader reader = manager.WorkflowMarkupStack[typeof(XmlReader)] as XmlReader;
|
||||
if (reader == null)
|
||||
{
|
||||
Debug.Assert(false);
|
||||
return this.typeName;
|
||||
}
|
||||
|
||||
string typename = this.typeName.Trim();
|
||||
string prefix = String.Empty;
|
||||
int typeIndex = typename.IndexOf(':');
|
||||
if (typeIndex >= 0)
|
||||
{
|
||||
prefix = typename.Substring(0, typeIndex);
|
||||
typename = typename.Substring(typeIndex + 1);
|
||||
type = manager.GetType(new XmlQualifiedName(typename, reader.LookupNamespace(prefix)));
|
||||
if (type != null)
|
||||
return type;
|
||||
|
||||
// To Support types whose assembly is not available, we need to still resolve the clr namespace
|
||||
List<WorkflowMarkupSerializerMapping> xmlnsMappings = null;
|
||||
if (manager.XmlNamespaceBasedMappings.TryGetValue(reader.LookupNamespace(prefix), out xmlnsMappings) && xmlnsMappings != null && xmlnsMappings.Count > 0)
|
||||
return xmlnsMappings[0].ClrNamespace + "." + typename;
|
||||
else
|
||||
return typename;
|
||||
}
|
||||
type = manager.GetType(new XmlQualifiedName(typename, reader.LookupNamespace(string.Empty)));
|
||||
|
||||
// To Support Beta2 format
|
||||
if (type == null)
|
||||
{
|
||||
ITypeProvider typeProvider = provider.GetService(typeof(ITypeProvider)) as ITypeProvider;
|
||||
if (typeProvider != null)
|
||||
type = typeProvider.GetType(typename);
|
||||
|
||||
// If not design mode, get the value from serialization manager
|
||||
// At design time, we need to get the type from ITypeProvider else
|
||||
// we need to store the string in the hashtable we maintain internally
|
||||
if (type == null && manager.GetService(typeof(ITypeResolutionService)) == null)
|
||||
type = manager.SerializationManager.GetType(typename);
|
||||
}
|
||||
if (type != null)
|
||||
return type;
|
||||
|
||||
return this.typeName;
|
||||
}
|
||||
|
||||
[DefaultValue(null)]
|
||||
[ConstructorArgument("type")]
|
||||
public string TypeName
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.type != null)
|
||||
return this.type.FullName;
|
||||
return this.typeName;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value == null)
|
||||
throw new ArgumentNullException("value");
|
||||
|
||||
this.typeName = value;
|
||||
}
|
||||
}
|
||||
internal Type Type
|
||||
{
|
||||
get { return this.type; }
|
||||
}
|
||||
}
|
||||
|
||||
[ContentProperty("Items")]
|
||||
internal sealed class ArrayExtension : MarkupExtension
|
||||
{
|
||||
private ArrayList arrayElementList = new ArrayList();
|
||||
private Type arrayType;
|
||||
|
||||
public ArrayExtension()
|
||||
{
|
||||
}
|
||||
|
||||
public ArrayExtension(Type arrayType)
|
||||
{
|
||||
if (arrayType == null)
|
||||
throw new ArgumentNullException("arrayType");
|
||||
|
||||
this.arrayType = arrayType;
|
||||
}
|
||||
|
||||
public ArrayExtension(Array elements)
|
||||
{
|
||||
if (elements == null)
|
||||
throw new ArgumentNullException("elements");
|
||||
|
||||
arrayElementList.AddRange(elements);
|
||||
this.arrayType = elements.GetType().GetElementType();
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
public Type Type
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.arrayType;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
this.arrayType = value;
|
||||
}
|
||||
}
|
||||
|
||||
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
|
||||
public IList Items
|
||||
{
|
||||
get
|
||||
{
|
||||
return arrayElementList;
|
||||
}
|
||||
}
|
||||
|
||||
public override object ProvideValue(IServiceProvider provider)
|
||||
{
|
||||
if (provider == null)
|
||||
throw new ArgumentNullException("provider");
|
||||
|
||||
if (this.arrayType == null)
|
||||
throw new InvalidOperationException("ArrayType needs to be set.");
|
||||
|
||||
object retArray = null;
|
||||
try
|
||||
{
|
||||
retArray = arrayElementList.ToArray(this.arrayType);
|
||||
}
|
||||
catch (System.InvalidCastException)
|
||||
{
|
||||
//
|
||||
|
||||
|
||||
|
||||
throw new InvalidOperationException();
|
||||
}
|
||||
|
||||
return retArray;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user