陈清红
2025-04-14 880f3c0257eeb8c37761d484258fdd102a369a19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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' }
}