@@ -1465,21 +1465,30 @@ impl Index {
1465
1465
& self ,
1466
1466
container_name : & str ,
1467
1467
variable_name : & str ,
1468
+ ) -> Option < & VariableIndexEntry > {
1469
+ self . find_local_member_recursive ( container_name, variable_name, & mut FxHashSet :: default ( ) )
1470
+ }
1471
+
1472
+ fn find_local_member_recursive (
1473
+ & self ,
1474
+ container_name : & str ,
1475
+ variable_name : & str ,
1476
+ seen : & mut FxHashSet < String > ,
1468
1477
) -> Option < & VariableIndexEntry > {
1469
1478
self . type_index
1470
1479
. find_type ( container_name)
1471
1480
. and_then ( |it| it. find_member ( variable_name) )
1472
1481
. or ( self . find_enum_variant_in_pou ( container_name, variable_name) )
1473
- // underlying type of an `ACTION`
1482
+ // underlying type of an `ACTION` or `METHOD`
1474
1483
. or ( container_name
1475
1484
. rfind ( '.' )
1476
1485
. map ( |p| & container_name[ ..p] )
1477
- . and_then ( |qualifier| self . find_member ( qualifier, variable_name) ) )
1486
+ . and_then ( |qualifier| self . find_member_recursive ( qualifier, variable_name, seen ) ) )
1478
1487
// 'self' instance of a POUs init function
1479
1488
. or ( container_name
1480
1489
. rfind ( "__init_" )
1481
1490
. map ( |p| & container_name[ p + 1 ..] )
1482
- . and_then ( |qualifier| self . find_member ( qualifier, variable_name) ) )
1491
+ . and_then ( |qualifier| self . find_member_recursive ( qualifier, variable_name, seen ) ) )
1483
1492
}
1484
1493
1485
1494
/// Searches for variable name in the given container, if not found, attempts to search for it in super classes
@@ -1491,13 +1500,13 @@ impl Index {
1491
1500
& ' b self ,
1492
1501
container_name : & str ,
1493
1502
variable_name : & str ,
1494
- seen : & mut FxHashSet < & ' b str > ,
1503
+ seen : & mut FxHashSet < String > ,
1495
1504
) -> Option < & ' b VariableIndexEntry > {
1496
1505
// Find pou in index
1497
- self . find_local_member ( container_name, variable_name)
1506
+ self . find_local_member_recursive ( container_name, variable_name, seen )
1498
1507
. or_else ( || {
1499
1508
if let Some ( class) = self . find_pou ( container_name) . and_then ( |it| it. get_super_class ( ) ) {
1500
- if !seen. insert ( class) {
1509
+ if !seen. insert ( class. into ( ) ) {
1501
1510
return None ;
1502
1511
}
1503
1512
self . find_member_recursive ( class, variable_name, seen) . filter ( |it| !( it. is_temp ( ) ) )
0 commit comments