@@ -1027,7 +1027,12 @@ private Arguments transformArgumentList(ArgumentListContext al) {
10271027 private ExprMemberMethod transformMemberMethodCall2 (WPos source ,
10281028 ExprContext receiver , Token dots , Token funcName ,
10291029 TypeArgsContext typeArgs , ArgumentListContext args ) {
1030- Expr left = transformExpr (receiver );
1030+ return transformMemberMethodCall2 (source , transformExpr (receiver ), dots , funcName , typeArgs , args );
1031+ }
1032+
1033+ private ExprMemberMethod transformMemberMethodCall2 (WPos source ,
1034+ Expr left , Token dots , Token funcName ,
1035+ TypeArgsContext typeArgs , ArgumentListContext args ) {
10311036 if (dots .getType () == WurstParser .DOT ) {
10321037 return Ast .ExprMemberMethodDot (source , left , text (funcName ),
10331038 transformTypeArgs (typeArgs ), transformArgumentList (args ));
@@ -1091,6 +1096,11 @@ private Expr transformExpr(ExprContext e) {
10911096 } else if (e .castToType != null ) {
10921097 return Ast .ExprCast (source , transformTypeExpr (e .castToType ),
10931098 transformExpr (e .left ));
1099+ } else if (e .dotsTypeCall != null ) {
1100+ TypeExpr receiverType = transformGenericTypeReceiver (e .receiverType );
1101+ Expr left = Ast .ExprTypeRef (receiverType .getSource (), receiverType );
1102+ return transformMemberMethodCall2 (source , left , e .dotsTypeCall ,
1103+ e .typeFuncName , e .typeCallTypeArgs , e .typeCallArgs );
10941104 } else if (e .dotsVar != null ) {
10951105 return transformExprMemberVarAccess2 (source , e .receiver , e .dotsVar ,
10961106 e .varName , e .indexes ());
@@ -1120,6 +1130,23 @@ private Expr transformExpr(ExprContext e) {
11201130
11211131 }
11221132
1133+ private TypeExpr transformGenericTypeReceiver (GenericTypeReceiverContext receiverType ) {
1134+ OptTypeExpr scopeType = Ast .NoTypeExpr ();
1135+ TypeExpr result = null ;
1136+
1137+ for (GenericTypeReceiverPrefixPartContext part : receiverType .receiverTypePrefixes ) {
1138+ result = Ast .TypeExprSimple (source (part .typeName ), scopeType ,
1139+ part .typeName .getText (), Ast .TypeExprList ());
1140+ scopeType = result ;
1141+ }
1142+
1143+ GenericTypeReceiverGenericPartContext genericPart = receiverType .receiverTypeGenericPart ;
1144+ result = Ast .TypeExprSimple (source (genericPart .typeName ), scopeType ,
1145+ genericPart .typeName .getText (), transformTypeArgs (genericPart .typeArgsNonEmpty ()));
1146+
1147+ return result ;
1148+ }
1149+
11231150 private int beginPos (ParseTree left ) {
11241151 if (left instanceof ParserRuleContext ) {
11251152 ParserRuleContext left2 = (ParserRuleContext ) left ;
@@ -1379,6 +1406,14 @@ private TypeExprList transformTypeArgs(TypeArgsContext typeArgs) {
13791406 return result ;
13801407 }
13811408
1409+ private TypeExprList transformTypeArgs (TypeArgsNonEmptyContext typeArgs ) {
1410+ TypeExprList result = Ast .TypeExprList ();
1411+ for (TypeExprContext e : typeArgs .args ) {
1412+ result .add (transformTypeExpr (e ));
1413+ }
1414+ return result ;
1415+ }
1416+
13821417 private WParameters transformFormalParameters (FormalParametersContext ps ,
13831418 boolean makeConstant ) {
13841419 WParameters result = Ast .WParameters ();
0 commit comments