@@ -470,7 +470,7 @@ public string GetTypeFromReturnStatementAst(Ast funcAst, ReturnStatementAst ret,
470470 }
471471 else if ( cmAst . Expression is MemberExpressionAst )
472472 {
473- result = GetTypeFromMemberExpressionAstHelper ( cmAst . Expression as MemberExpressionAst , funcAst , classes ) ;
473+ result = GetTypeFromMemberExpressionAst ( cmAst . Expression as MemberExpressionAst , funcAst , classes ) ;
474474 }
475475 }
476476 }
@@ -484,7 +484,16 @@ public string GetTypeFromReturnStatementAst(Ast funcAst, ReturnStatementAst ret,
484484 return result ;
485485 }
486486
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 )
488497 {
489498 if ( memberAst == null )
490499 {
@@ -497,28 +506,33 @@ internal string GetTypeFromMemberExpressionAstHelper(MemberExpressionAst memberA
497506 if ( memberAst . Expression is VariableExpressionAst && VariableAnalysisDictionary . ContainsKey ( scopeAst ) )
498507 {
499508 VariableAnalysis VarTypeAnalysis = VariableAnalysisDictionary [ scopeAst ] ;
509+ // Get the analysis detail for the variable
500510 details = VarTypeAnalysis . GetVariableAnalysis ( memberAst . Expression as VariableExpressionAst ) ;
501511
502512 if ( details != null && classes != null )
503513 {
514+ // Get the class that corresponds to the name of the type (if possible)
504515 psClass = classes . FirstOrDefault ( item => String . Equals ( item . Name , details . Type . FullName , StringComparison . OrdinalIgnoreCase ) ) ;
505516 }
506517 }
507518
508- return GetTypeFromMemberExpressionAst ( memberAst , psClass , details ) ;
519+ return GetTypeFromMemberExpressionAstHelper ( memberAst , psClass , details ) ;
509520 }
510521
511522 /// <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).
513525 /// </summary>
514526 /// <param name="memberAst"></param>
515527 /// <param name="psClass"></param>
516528 /// <param name="analysisDetails"></param>
517529 /// <returns></returns>
518- public string GetTypeFromMemberExpressionAst ( MemberExpressionAst memberAst , TypeDefinitionAst psClass , VariableAnalysisDetails analysisDetails )
530+ internal string GetTypeFromMemberExpressionAstHelper ( MemberExpressionAst memberAst , TypeDefinitionAst psClass , VariableAnalysisDetails analysisDetails )
519531 {
532+ //Try to get the type without using psClass first
520533 Type result = AssignmentTarget . GetTypeFromMemberExpressionAst ( memberAst ) ;
521534
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
522536 if ( result == null && psClass != null && analysisDetails != null )
523537 {
524538 result = AssignmentTarget . GetTypeFromMemberExpressionAst ( memberAst , analysisDetails , psClass ) ;
@@ -1131,7 +1145,7 @@ public object VisitReturnStatement(ReturnStatementAst returnStatementAst)
11311145 /// <returns></returns>
11321146 public object VisitMemberExpression ( MemberExpressionAst memAst )
11331147 {
1134- return Helper . Instance . GetTypeFromMemberExpressionAstHelper ( memAst , myFunction , classes ) ;
1148+ return Helper . Instance . GetTypeFromMemberExpressionAst ( memAst , myFunction , classes ) ;
11351149 }
11361150
11371151 /// <summary>
@@ -1141,7 +1155,7 @@ public object VisitMemberExpression(MemberExpressionAst memAst)
11411155 /// <returns></returns>
11421156 public object VisitInvokeMemberExpression ( InvokeMemberExpressionAst invokeAst )
11431157 {
1144- return Helper . Instance . GetTypeFromMemberExpressionAstHelper ( invokeAst , myFunction , classes ) ;
1158+ return Helper . Instance . GetTypeFromMemberExpressionAst ( invokeAst , myFunction , classes ) ;
11451159 }
11461160
11471161 /// <summary>
0 commit comments