@@ -1182,5 +1182,213 @@ End Sub
11821182
11831183 Assert . AreEqual ( 1 , usages . Count ( ) ) ;
11841184 }
1185+
1186+ [ TestMethod ]
1187+ public void GivenField_NamedUnambiguously_FieldAssignmentCallResolvesToFieldDeclaration ( )
1188+ {
1189+ var code = @"
1190+ Private Type TestModule1
1191+ Foo As Integer
1192+ End Type
1193+
1194+ Private Bar As TestModule1
1195+
1196+ Public Sub DoSomething()
1197+ Bar.Foo = 42
1198+ End Sub
1199+ " ;
1200+ var state = Resolve ( code ) ;
1201+
1202+ var declaration = state . AllUserDeclarations . Single ( item =>
1203+ item . DeclarationType == DeclarationType . Variable
1204+ && item . IdentifierName == "Bar" ) ;
1205+
1206+ var usages = declaration . References . Where ( item =>
1207+ item . ParentScoping . IdentifierName == "DoSomething" ) ;
1208+
1209+ Assert . AreEqual ( 1 , usages . Count ( ) ) ;
1210+ }
1211+
1212+ [ TestMethod ]
1213+ public void GivenField_NamedUnambiguously_InStatementFieldCallResolvesToFieldDeclaration ( )
1214+ {
1215+ var code = @"
1216+ Private Type TestModule1
1217+ Foo As Integer
1218+ End Type
1219+
1220+ Private Bar As TestModule1
1221+
1222+ Public Sub DoSomething()
1223+ Debug.Print Bar.Foo
1224+ End Sub
1225+ " ;
1226+ var state = Resolve ( code ) ;
1227+
1228+ var declaration = state . AllUserDeclarations . Single ( item =>
1229+ item . DeclarationType == DeclarationType . Variable
1230+ && item . IdentifierName == "Bar" ) ;
1231+
1232+ var usages = declaration . References . Where ( item =>
1233+ item . ParentScoping . IdentifierName == "DoSomething" ) ;
1234+
1235+ Assert . AreEqual ( 1 , usages . Count ( ) ) ;
1236+ }
1237+
1238+ [ TestMethod ]
1239+ public void GivenField_NamedAmbiguously_FieldAssignmentCallResolvesToFieldDeclaration ( )
1240+ {
1241+ var code = @"
1242+ Private Type TestModule1
1243+ Foo As Integer
1244+ End Type
1245+
1246+ Private TestModule1 As TestModule1
1247+
1248+ Public Sub DoSomething()
1249+ TestModule1.Foo = 42
1250+ End Sub
1251+ " ;
1252+ var state = Resolve ( code ) ;
1253+
1254+ var declaration = state . AllUserDeclarations . Single ( item =>
1255+ item . DeclarationType == DeclarationType . Variable
1256+ && item . IdentifierName == item . ComponentName ) ;
1257+
1258+ var usages = declaration . References . Where ( item =>
1259+ item . ParentScoping . IdentifierName == "DoSomething" ) ;
1260+
1261+ Assert . AreEqual ( 1 , usages . Count ( ) ) ;
1262+ }
1263+
1264+ [ TestMethod ]
1265+ public void GivenUDTField_NamedAmbiguously_MemberAssignmentCallResolvesToUDTMember ( )
1266+ {
1267+ var code = @"
1268+ Private Type TestModule1
1269+ Foo As Integer
1270+ End Type
1271+
1272+ Private TestModule1 As TestModule1
1273+
1274+ Public Sub DoSomething()
1275+ TestModule1.Foo = 42
1276+ End Sub
1277+ " ;
1278+ var state = Resolve ( code ) ;
1279+
1280+ var declaration = state . AllUserDeclarations . Single ( item =>
1281+ item . DeclarationType == DeclarationType . UserDefinedTypeMember
1282+ && item . IdentifierName == "Foo" ) ;
1283+
1284+ var usages = declaration . References . Where ( item =>
1285+ item . ParentScoping . IdentifierName == "DoSomething" ) ;
1286+
1287+ Assert . AreEqual ( 1 , usages . Count ( ) ) ;
1288+ }
1289+
1290+ [ TestMethod ]
1291+ public void GivenUDTField_NamedAmbiguously_FullyQualifiedMemberAssignmentCallResolvesToUDTMember ( )
1292+ {
1293+ var code = @"
1294+ Private Type TestModule1
1295+ Foo As Integer
1296+ End Type
1297+
1298+ Private TestModule1 As TestModule1
1299+
1300+ Public Sub DoSomething()
1301+ TestProject1.TestModule1.TestModule1.Foo = 42
1302+ End Sub
1303+ " ;
1304+ var state = Resolve ( code ) ;
1305+
1306+ var declaration = state . AllUserDeclarations . Single ( item =>
1307+ item . DeclarationType == DeclarationType . UserDefinedTypeMember
1308+ && item . IdentifierName == "Foo" ) ;
1309+
1310+ var usages = declaration . References . Where ( item =>
1311+ item . ParentScoping . IdentifierName == "DoSomething" ) ;
1312+
1313+ Assert . AreEqual ( 1 , usages . Count ( ) ) ;
1314+ }
1315+
1316+ [ TestMethod ]
1317+ public void GivenFullyReferencedUDTFieldMemberCall_ProjectParentMember_ResolvesToProject ( )
1318+ {
1319+ var code = @"
1320+ Private Type TestModule1
1321+ Foo As Integer
1322+ End Type
1323+
1324+ Private TestModule1 As TestModule1
1325+
1326+ Public Sub DoSomething()
1327+ TestProject1.TestModule1.TestModule1.Foo = 42
1328+ End Sub
1329+ " ;
1330+ var state = Resolve ( code ) ;
1331+
1332+ var declaration = state . AllUserDeclarations . Single ( item =>
1333+ item . DeclarationType == DeclarationType . Project
1334+ && item . IdentifierName == item . ProjectName ) ;
1335+
1336+ var usages = declaration . References . Where ( item =>
1337+ item . ParentScoping . IdentifierName == "DoSomething" ) ;
1338+
1339+ Assert . AreEqual ( 1 , usages . Count ( ) ) ;
1340+ }
1341+
1342+ [ TestMethod ]
1343+ public void GivenFullyReferencedUDTFieldMemberCall_ModuleParentMember_ResolvesToModule ( )
1344+ {
1345+ var code = @"
1346+ Private Type TestModule1
1347+ Foo As Integer
1348+ End Type
1349+
1350+ Private TestModule1 As TestModule1
1351+
1352+ Public Sub DoSomething()
1353+ TestProject1.TestModule1.TestModule1.Foo = 42
1354+ End Sub
1355+ " ;
1356+ var state = Resolve ( code ) ;
1357+
1358+ var declaration = state . AllUserDeclarations . Single ( item =>
1359+ item . DeclarationType == DeclarationType . Module
1360+ && item . IdentifierName == item . ComponentName ) ;
1361+
1362+ var usages = declaration . References . Where ( item =>
1363+ item . ParentScoping . IdentifierName == "DoSomething" ) ;
1364+
1365+ Assert . AreEqual ( 1 , usages . Count ( ) ) ;
1366+ }
1367+
1368+ [ TestMethod ]
1369+ public void GivenFullyReferencedUDTFieldMemberCall_FieldParentMember_ResolvesToVariable ( )
1370+ {
1371+ var code = @"
1372+ Private Type TestModule1
1373+ Foo As Integer
1374+ End Type
1375+
1376+ Private TestModule1 As TestModule1
1377+
1378+ Public Sub DoSomething()
1379+ TestProject1.TestModule1.TestModule1.Foo = 42
1380+ End Sub
1381+ " ;
1382+ var state = Resolve ( code ) ;
1383+
1384+ var declaration = state . AllUserDeclarations . Single ( item =>
1385+ item . DeclarationType == DeclarationType . Variable
1386+ && item . IdentifierName == item . ComponentName ) ;
1387+
1388+ var usages = declaration . References . Where ( item =>
1389+ item . ParentScoping . IdentifierName == "DoSomething" ) ;
1390+
1391+ Assert . AreEqual ( 1 , usages . Count ( ) ) ;
1392+ }
11851393 }
11861394}
0 commit comments