Quintiq file version 2.0
|
#parent: #root
|
StaticMethod Deserialize (String string) as owning ReflectionMethod
|
{
|
Description:
|
[*
|
Convert a serialized method into a reflection method.
|
|
This should only be used in unit tests.
|
*]
|
TextBody:
|
[*
|
json := guard( JSON::Parse( string ), null( JSON, owning ) );
|
|
result := null( ReflectionMethod, owning );
|
if( not isnull( json ) )
|
{
|
type := Type::Resolve( json.Get( LibOpt_Reflection::JSON_Type() ).GetString() );
|
method_name := json.Get( LibOpt_Reflection::JSON_MethodName() ).GetString();
|
|
argument_types := construct( structured_Type );
|
json_arguments := json.Get( LibOpt_Reflection::JSON_Arguments() );
|
for( i := 0; i < json_arguments.Size(); i++ )
|
{
|
argument_types.Add( Type::Resolve( json_arguments.Get( i ).GetString() ) );
|
}
|
|
// Find the correct method
|
if( argument_types.Size() = 0 )
|
{
|
result := Reflection::FindStaticMethodBySignature( type,
|
method_name );
|
}
|
else if( argument_types.Size() = 1 )
|
{
|
result := Reflection::FindStaticMethodBySignature( type,
|
method_name,
|
argument_types.Element( 0 ) );
|
}
|
else if( argument_types.Size() = 2 )
|
{
|
result := Reflection::FindStaticMethodBySignature( type,
|
method_name,
|
argument_types.Element( 0 ),
|
argument_types.Element( 1 ) );
|
}
|
else if( argument_types.Size() = 3 )
|
{
|
result := Reflection::FindStaticMethodBySignature( type,
|
method_name,
|
argument_types.Element( 0 ),
|
argument_types.Element( 1 ),
|
argument_types.Element( 2 ) );
|
}
|
else if( argument_types.Size() = 4 )
|
{
|
result := Reflection::FindStaticMethodBySignature( type,
|
method_name,
|
argument_types.Element( 0 ),
|
argument_types.Element( 1 ),
|
argument_types.Element( 2 ),
|
argument_types.Element( 3 ) );
|
}
|
else if( argument_types.Size() = 5 )
|
{
|
result := Reflection::FindStaticMethodBySignature( type,
|
method_name,
|
argument_types.Element( 0 ),
|
argument_types.Element( 1 ),
|
argument_types.Element( 2 ),
|
argument_types.Element( 3 ),
|
argument_types.Element( 4 ) );
|
}
|
else if( argument_types.Size() = 6 )
|
{
|
result := Reflection::FindStaticMethodBySignature( type,
|
method_name,
|
argument_types.Element( 0 ),
|
argument_types.Element( 1 ),
|
argument_types.Element( 2 ),
|
argument_types.Element( 3 ),
|
argument_types.Element( 4 ),
|
argument_types.Element( 5 ) );
|
}
|
else if( argument_types.Size() = 7 )
|
{
|
result := Reflection::FindStaticMethodBySignature( type,
|
method_name,
|
argument_types.Element( 0 ),
|
argument_types.Element( 1 ),
|
argument_types.Element( 2 ),
|
argument_types.Element( 3 ),
|
argument_types.Element( 4 ),
|
argument_types.Element( 5 ),
|
argument_types.Element( 6 ) );
|
}
|
else
|
{
|
error( 'Cannot find method' );
|
}
|
}
|
|
return & result;
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|