@@ -470,7 +470,7 @@ public string GetTypeFromReturnStatementAst(Ast funcAst, ReturnStatementAst ret,
470
470
}
471
471
else if ( cmAst . Expression is MemberExpressionAst )
472
472
{
473
- result = GetTypeFromMemberExpressionAstHelper ( cmAst . Expression as MemberExpressionAst , funcAst , classes ) ;
473
+ result = GetTypeFromMemberExpressionAst ( cmAst . Expression as MemberExpressionAst , funcAst , classes ) ;
474
474
}
475
475
}
476
476
}
@@ -484,7 +484,16 @@ public string GetTypeFromReturnStatementAst(Ast funcAst, ReturnStatementAst ret,
484
484
return result ;
485
485
}
486
486
487
- internal string GetTypeFromMemberExpressionAstHelper ( MemberExpressionAst memberAst , Ast scopeAst , IEnumerable < TypeDefinitionAst > classes )
487
+ /// <summary>
488
+ /// Returns the type from member expression ast, which is inside scopeAst.
489
+ /// This function assumes that Initialize Variable Analysis is already run on scopeAst.
490
+ /// Classes represent the list of DSC classes in the script.
491
+ /// </summary>
492
+ /// <param name="memberAst"></param>
493
+ /// <param name="scopeAst"></param>
494
+ /// <param name="classes"></param>
495
+ /// <returns></returns>
496
+ public string GetTypeFromMemberExpressionAst ( MemberExpressionAst memberAst , Ast scopeAst , IEnumerable < TypeDefinitionAst > classes )
488
497
{
489
498
if ( memberAst == null )
490
499
{
@@ -497,28 +506,33 @@ internal string GetTypeFromMemberExpressionAstHelper(MemberExpressionAst memberA
497
506
if ( memberAst . Expression is VariableExpressionAst && VariableAnalysisDictionary . ContainsKey ( scopeAst ) )
498
507
{
499
508
VariableAnalysis VarTypeAnalysis = VariableAnalysisDictionary [ scopeAst ] ;
509
+ // Get the analysis detail for the variable
500
510
details = VarTypeAnalysis . GetVariableAnalysis ( memberAst . Expression as VariableExpressionAst ) ;
501
511
502
512
if ( details != null && classes != null )
503
513
{
514
+ // Get the class that corresponds to the name of the type (if possible)
504
515
psClass = classes . FirstOrDefault ( item => String . Equals ( item . Name , details . Type . FullName , StringComparison . OrdinalIgnoreCase ) ) ;
505
516
}
506
517
}
507
518
508
- return GetTypeFromMemberExpressionAst ( memberAst , psClass , details ) ;
519
+ return GetTypeFromMemberExpressionAstHelper ( memberAst , psClass , details ) ;
509
520
}
510
521
511
522
/// <summary>
512
- /// Retrieves the type from member expression ast
523
+ /// Retrieves the type from member expression ast. psClass is the powershell class
524
+ /// that represents the type of the object being invoked on (psClass may be null too).
513
525
/// </summary>
514
526
/// <param name="memberAst"></param>
515
527
/// <param name="psClass"></param>
516
528
/// <param name="analysisDetails"></param>
517
529
/// <returns></returns>
518
- public string GetTypeFromMemberExpressionAst ( MemberExpressionAst memberAst , TypeDefinitionAst psClass , VariableAnalysisDetails analysisDetails )
530
+ internal string GetTypeFromMemberExpressionAstHelper ( MemberExpressionAst memberAst , TypeDefinitionAst psClass , VariableAnalysisDetails analysisDetails )
519
531
{
532
+ //Try to get the type without using psClass first
520
533
Type result = AssignmentTarget . GetTypeFromMemberExpressionAst ( memberAst ) ;
521
534
535
+ //If we can't get the type, then it may be that the type of the object being invoked on is a powershell class
522
536
if ( result == null && psClass != null && analysisDetails != null )
523
537
{
524
538
result = AssignmentTarget . GetTypeFromMemberExpressionAst ( memberAst , analysisDetails , psClass ) ;
@@ -1131,7 +1145,7 @@ public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
1131
1145
/// <returns></returns>
1132
1146
public object VisitMemberExpression ( MemberExpressionAst memAst )
1133
1147
{
1134
- return Helper . Instance . GetTypeFromMemberExpressionAstHelper ( memAst , myFunction , classes ) ;
1148
+ return Helper . Instance . GetTypeFromMemberExpressionAst ( memAst , myFunction , classes ) ;
1135
1149
}
1136
1150
1137
1151
/// <summary>
@@ -1141,7 +1155,7 @@ public object VisitMemberExpression(MemberExpressionAst memAst)
1141
1155
/// <returns></returns>
1142
1156
public object VisitInvokeMemberExpression ( InvokeMemberExpressionAst invokeAst )
1143
1157
{
1144
- return Helper . Instance . GetTypeFromMemberExpressionAstHelper ( invokeAst , myFunction , classes ) ;
1158
+ return Helper . Instance . GetTypeFromMemberExpressionAst ( invokeAst , myFunction , classes ) ;
1145
1159
}
1146
1160
1147
1161
/// <summary>
0 commit comments