@@ -1269,4 +1269,297 @@ public partial class RegularClass
12691269
12701270 return TestAndVerify ( source ) ;
12711271 }
1272+
1273+ [ Fact ]
1274+ public Task RequiredPropertyTest ( )
1275+ {
1276+ var source = @"
1277+ [Reactive]
1278+ public partial class Person
1279+ {
1280+ public required partial string Name { get; set; }
1281+ public required partial int Age { get; set; }
1282+ public partial string? OptionalNickname { get; set; }
1283+ }" ;
1284+
1285+ return TestAndVerify ( source ) ;
1286+ }
1287+
1288+ [ Fact ]
1289+ public Task RequiredPropertyWithReactiveObjectTest ( )
1290+ {
1291+ var source = @"
1292+ using ReactiveUI;
1293+
1294+ [Reactive]
1295+ public partial class Person : ReactiveObject
1296+ {
1297+ public required partial string Name { get; set; }
1298+ public required partial DateOnly BirthDate { get; set; }
1299+ }" ;
1300+
1301+ return TestAndVerify ( source ) ;
1302+ }
1303+
1304+ [ Fact ]
1305+ public Task RequiredPropertyWithInheritanceTest ( )
1306+ {
1307+ var source = @"
1308+ [Reactive]
1309+ public abstract partial class Entity
1310+ {
1311+ public required partial string Id { get; set; }
1312+ }
1313+
1314+ [Reactive]
1315+ public partial class Person : Entity
1316+ {
1317+ public required partial string Name { get; set; }
1318+ }" ;
1319+
1320+ return TestAndVerify ( source ) ;
1321+ }
1322+
1323+ [ Fact ]
1324+ public Task RequiredPropertyWithMixedModifiersTest ( )
1325+ {
1326+ var source = @"
1327+ [Reactive]
1328+ public partial class BaseClass
1329+ {
1330+ public required virtual partial string VirtualRequired { get; set; }
1331+ }
1332+
1333+ [Reactive]
1334+ public partial class DerivedClass : BaseClass
1335+ {
1336+ public required override partial string VirtualRequired { get; set; }
1337+ public required partial string LocalRequired { get; set; }
1338+ }" ;
1339+
1340+ return TestAndVerify ( source ) ;
1341+ }
1342+
1343+ [ Fact ]
1344+ public Task AllPropertyModifiersTest ( )
1345+ {
1346+ var source = @"
1347+ [Reactive]
1348+ public partial class Base
1349+ {
1350+ // Static properties
1351+ public static partial string StaticProp { get; set; }
1352+ protected static partial string ProtectedStaticProp { get; set; }
1353+
1354+ // Virtual and abstract properties
1355+ public virtual partial string VirtualProp { get; set; }
1356+ public abstract partial string AbstractProp { get; set; }
1357+
1358+ // Required properties
1359+ public required partial string RequiredProp { get; set; }
1360+
1361+ // Mixed modifiers
1362+ public required virtual partial string RequiredVirtualProp { get; set; }
1363+ }
1364+
1365+ [Reactive]
1366+ public partial class Derived : Base
1367+ {
1368+ // New properties (shadowing)
1369+ public new partial string VirtualProp { get; set; }
1370+
1371+ // Override properties
1372+ public override partial string AbstractProp { get; set; }
1373+
1374+ // Sealed override properties
1375+ public sealed override partial string RequiredVirtualProp { get; set; }
1376+
1377+ // Static shadows
1378+ public new static partial string StaticProp { get; set; }
1379+ }" ;
1380+
1381+ return TestAndVerify ( source ) ;
1382+ }
1383+
1384+ [ Fact ]
1385+ public Task StaticPropertyTest ( )
1386+ {
1387+ var source = @"
1388+ [Reactive]
1389+ public partial class TestClass
1390+ {
1391+ public static partial string GlobalConfig { get; set; }
1392+ private static partial int Counter { get; set; }
1393+ }" ;
1394+
1395+ return TestAndVerify ( source ) ;
1396+ }
1397+
1398+ [ Fact ]
1399+ public Task NewModifierTest ( )
1400+ {
1401+ var source = @"
1402+ [Reactive]
1403+ public partial class Base
1404+ {
1405+ public partial string Name { get; set; }
1406+ }
1407+
1408+ [Reactive]
1409+ public partial class Derived : Base
1410+ {
1411+ public new partial string Name { get; set; }
1412+ }" ;
1413+
1414+ return TestAndVerify ( source ) ;
1415+ }
1416+
1417+ [ Fact ]
1418+ public Task SealedOverrideTest ( )
1419+ {
1420+ var source = @"
1421+ [Reactive]
1422+ public partial class Base
1423+ {
1424+ public virtual partial string VirtualProp { get; set; }
1425+ }
1426+
1427+ [Reactive]
1428+ public partial class Derived : Base
1429+ {
1430+ public sealed override partial string VirtualProp { get; set; }
1431+ }" ;
1432+
1433+ return TestAndVerify ( source ) ;
1434+ }
1435+
1436+ [ Fact ]
1437+ public Task MixedModifiersTest ( )
1438+ {
1439+ var source = @"
1440+ [Reactive]
1441+ public partial class TestClass
1442+ {
1443+ // Static + Required
1444+ public static required partial string StaticRequired { get; set; }
1445+
1446+ // New + Static
1447+ public new static partial string NewStatic { get; set; }
1448+
1449+ // Virtual + Required
1450+ public virtual required partial string VirtualRequired { get; set; }
1451+
1452+ // Override + Sealed
1453+ public sealed override partial string SealedOverride { get; set; }
1454+ }" ;
1455+
1456+ return TestAndVerify ( source ) ;
1457+ }
1458+
1459+ [ Fact ]
1460+ public Task AccessorModifiersTest ( )
1461+ {
1462+ var source = @"
1463+ [Reactive]
1464+ public partial class TestClass
1465+ {
1466+ // Property with private setter
1467+ public partial string Name { get; private set; }
1468+
1469+ // Protected property with private getter
1470+ protected partial string Id { private get; set; }
1471+
1472+ // Internal property with protected setter
1473+ internal partial string Code { get; protected set; }
1474+
1475+ // Public property with protected internal setter
1476+ public partial string Key { get; protected internal set; }
1477+ }" ;
1478+
1479+ return TestAndVerify ( source ) ;
1480+ }
1481+
1482+ [ Fact ]
1483+ public Task ModifierOrderingTest ( )
1484+ {
1485+ var source = @"
1486+ [Reactive]
1487+ public partial class Base
1488+ {
1489+ // Base class properties for override/shadowing
1490+ public virtual partial string VirtualProp { get; set; }
1491+ protected virtual partial string ProtectedVirtualProp { get; set; }
1492+ public static partial string StaticProp { get; set; }
1493+ public abstract partial string AbstractProp { get; set; }
1494+ }
1495+
1496+ [Reactive]
1497+ public partial class Derived : Base
1498+ {
1499+ // Test new modifier comes first
1500+ public new partial string VirtualProp { get; set; }
1501+
1502+ // Test new + static ordering
1503+ public new static partial string StaticProp { get; set; }
1504+
1505+ // Test override + sealed + required ordering
1506+ public sealed override required partial string ProtectedVirtualProp { get; set; }
1507+
1508+ // Test override + required ordering
1509+ public override required partial string AbstractProp { get; set; }
1510+
1511+ // Test required only
1512+ public required partial string RequiredProp { get; set; }
1513+ }" ;
1514+
1515+ return TestAndVerify ( source ) ;
1516+ }
1517+
1518+ [ Fact ]
1519+ public Task InheritanceModifiersTest ( )
1520+ {
1521+ var source = @"
1522+ [Reactive]
1523+ public abstract partial class BaseClass
1524+ {
1525+ // Virtual property
1526+ public virtual partial string VirtualProp { get; set; }
1527+
1528+ // Abstract property
1529+ public abstract partial string AbstractProp { get; set; }
1530+ }
1531+
1532+ [Reactive]
1533+ public partial class DerivedClass : BaseClass
1534+ {
1535+ // Override property
1536+ public override partial string VirtualProp { get; set; }
1537+
1538+ // Sealed override property
1539+ public sealed override partial string AbstractProp { get; set; }
1540+ }" ;
1541+
1542+ return TestAndVerify ( source ) ;
1543+ }
1544+
1545+ [ Fact ]
1546+ public Task RequiredModifierTest ( )
1547+ {
1548+ var source = @"
1549+ [Reactive]
1550+ public partial class TestClass
1551+ {
1552+ // Required property
1553+ public required partial string Name { get; set; }
1554+
1555+ // Required with virtual
1556+ public virtual required partial string VirtualRequired { get; set; }
1557+
1558+ // Required with different access levels
1559+ protected required partial string ProtectedRequired { get; set; }
1560+ private required partial string PrivateRequired { get; set; }
1561+ }" ;
1562+
1563+ return TestAndVerify ( source ) ;
1564+ }
12721565}
0 commit comments