You've already forked linux-packaging-mono
Imported Upstream version 4.0.0~alpha1
Former-commit-id: 806294f5ded97629b74c85c09952f2a74fe182d9
This commit is contained in:
117
external/referencesource/System.Workflow.Activities/LocalService/DataExchangeServiceBinder.cs
vendored
Normal file
117
external/referencesource/System.Workflow.Activities/LocalService/DataExchangeServiceBinder.cs
vendored
Normal file
@ -0,0 +1,117 @@
|
||||

|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Reflection;
|
||||
using System.Runtime.Serialization;
|
||||
using System.Runtime.Remoting;
|
||||
using System.Runtime.Remoting.Messaging;
|
||||
using System.Runtime.Remoting.Proxies;
|
||||
using System.Workflow.ComponentModel;
|
||||
using System.Workflow.Runtime;
|
||||
using System.Workflow.Runtime.Hosting;
|
||||
using System.Security.Permissions;
|
||||
using System.Globalization;
|
||||
|
||||
|
||||
namespace System.Workflow.Activities
|
||||
{
|
||||
internal sealed class ExternalDataExchangeBinder : Binder
|
||||
{
|
||||
Binder defltBinder;
|
||||
|
||||
internal ExternalDataExchangeBinder()
|
||||
{
|
||||
defltBinder = Type.DefaultBinder;
|
||||
}
|
||||
|
||||
public override MethodBase BindToMethod(BindingFlags bindingAttr,
|
||||
MethodBase[] match,
|
||||
ref object[] args,
|
||||
ParameterModifier[] modifiers,
|
||||
System.Globalization.CultureInfo culture,
|
||||
string[] names,
|
||||
out object state)
|
||||
{
|
||||
Object[] argsCopy = new Object[args.Length];
|
||||
args.CopyTo(argsCopy, 0);
|
||||
state = null;
|
||||
|
||||
try
|
||||
{
|
||||
return defltBinder.BindToMethod(bindingAttr, match, ref args, modifiers, culture, names, out state);
|
||||
}
|
||||
catch (MissingMethodException) //5% case where when passed null for params.
|
||||
{
|
||||
|
||||
if (match != null && match.Length != 0)
|
||||
{
|
||||
for (int i = 0; i < match.Length; ++i)
|
||||
{
|
||||
ParameterInfo[] methodParams = match[i].GetParameters();
|
||||
|
||||
if (methodParams.Length == argsCopy.Length)
|
||||
{
|
||||
for (int j = 0; j < methodParams.Length; ++j)
|
||||
{
|
||||
if (!methodParams[j].ParameterType.IsInstanceOfType(argsCopy[j]))
|
||||
{
|
||||
if (!(methodParams[j].ParameterType.IsArray && argsCopy[j] == null))
|
||||
break;
|
||||
}
|
||||
|
||||
if (j + 1 == methodParams.Length)
|
||||
return match[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public override FieldInfo BindToField(BindingFlags bindingAttr,
|
||||
FieldInfo[] match,
|
||||
object value,
|
||||
CultureInfo culture)
|
||||
{
|
||||
return defltBinder.BindToField(bindingAttr, match, value, culture);
|
||||
}
|
||||
|
||||
public override MethodBase SelectMethod(BindingFlags bindingAttr,
|
||||
MethodBase[] match,
|
||||
Type[] types,
|
||||
ParameterModifier[] modifiers)
|
||||
{
|
||||
return defltBinder.SelectMethod(bindingAttr, match, types, modifiers);
|
||||
}
|
||||
|
||||
public override PropertyInfo SelectProperty(BindingFlags bindingAttr,
|
||||
PropertyInfo[] match,
|
||||
Type returnType,
|
||||
Type[] indexes,
|
||||
ParameterModifier[] modifiers
|
||||
)
|
||||
{
|
||||
return defltBinder.SelectProperty(bindingAttr, match, returnType, indexes, modifiers);
|
||||
}
|
||||
|
||||
public override object ChangeType(object value,
|
||||
Type type,
|
||||
CultureInfo culture
|
||||
)
|
||||
{
|
||||
return defltBinder.ChangeType(value, type, culture);
|
||||
}
|
||||
|
||||
public override void ReorderArgumentArray(ref object[] args,
|
||||
object state
|
||||
)
|
||||
{
|
||||
defltBinder.ReorderArgumentArray(ref args, state);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user