1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398
|
Version 3.2.0, March 2, 2020
@SuppressWarnings("initialization") suppresses only warnings whose key
contains "initialization". Previously, it suppressed all warnings issued
by the Nullness Checker or the Initialization Checker.
Closed issues:
2719, 3001, 3020, 3069, 3093, 3120.
---------------------------------------------------------------------------
Version 3.1.1, February 3, 2020
New command-line options:
-AassumeDeterministic Unsoundly assume that every method is deterministic
-AassumePure Unsoundly assume that every method is pure
Renamed -Anocheckjdk to -ApermitMissingJdk.
The old version still works, for backward compatibility.
Renamed -Alint=forbidnonnullarraycomponents to
-Alint=soundArrayCreationNullness. The old version still works, for
backward compatibility.
Implementation details:
* Deprecated QualifierHierarchy#getTypeQualifiers.
* Deprecated Analysis#Analysis(ProcessingEnvironment) and Analysis#Analysis(T,
int, ProcessingEnvironment); use Analysis#Analysis(), Analysis#Analysis(int),
Analysis#Analysis(T), and Analysis#Analysis(T, int) instead.
Closed issues:
2181, 2975, 3018, 3022, 3032, 3036, 3037, 3038, 3041, 3049, 3055, 3076.
---------------------------------------------------------------------------
Version 3.1.0, January 3, 2020
Command-line option -AprintGitProperties prints information about the git
repository from which the Checker Framework was compiled.
Implementation details:
* Removed static cache in AnnotationUtils#areSameByClass and added
AnnotatedTypeFactory#areSameByClass that uses an instance cache.
* Removed static cache in AnnotationBuilder#fromName and #fromClass.
* ContractsUtils#getPreconditions takes an ExecutableElement as an argument.
* ContractsUtils#getContracts returns a Set.
* Moved ContractUtils.Contract to outer level.
* Renamed ConditionalPostcondition#annoResult to ConditionalPostcondition#resultValue.
Closed issues:
2867, 2897, 2972.
---------------------------------------------------------------------------
Version 3.0.1, December 2, 2019
New command-line option for the Constant Value Checker
`-AnoNullStringsConcatenation` unsoundly assumes that every operand of a String
concatenation is non-null.
Implementation details:
* Moved AnnotatedTypes#hasTypeQualifierElementTypes to AnnotationUtils.
* Deprecated AnnotatedTypes#isTypeAnnotation and AnnotatedTypes#hasTypeQualifierElementTypes.
Closed issues:
945, 1224, 2024, 2744, 2809, 2815, 2818, 2830, 2840, 2853, 2854, 2865, 2873,
2874, 2878, 2880, 2886, 2888, 2900, 2905, 2919, 2923.
---------------------------------------------------------------------------
Version 3.0.0, November 1, 2019
The Checker Framework works on both JDK 8 and JDK 11.
* Type annotations for JDK 8 remain in jdk8.jar.
* Type annotations for JDK 11 appear in stub files in checker.jar.
Removed the @PolyAll annotation.
Implementation details:
* Removed all previously deprecated methods.
* AnnotatedTypeFactory#getFnInterfaceFromTree now returns an AnnotatedExecutableType.
* AnnotationUtils#areSame and #areSameByName now only accept non-null
AnnotationMirrors
Closed issues:
1169, 1654, 2081, 2703, 2739, 2749, 2779, 2781, 2798, 2820, 2824, 2829, 2842,
2845, 2848.
---------------------------------------------------------------------------
Version 2.11.1, October 1, 2019
The manual links to the Object Construction Checker.
Closed issues:
1635, 2718, 2767.
---------------------------------------------------------------------------
Version 2.11.0, August 30, 2019
The Checker Framework now uses the Java 9 javac API. The manual describes
how to satisfy this dependency, in a way that works on a Java 8 JVM.
Running the Checker Framework on a Java 9 JVM is not yet supported.
---------------------------------------------------------------------------
Version 2.10.1, August 22, 2019
Closed issues:
1152, 1614, 2031, 2482, 2543, 2587, 2678, 2686, 2690, 2712, 2717, 2713, 2721,
2725, 2729.
---------------------------------------------------------------------------
Version 2.10.0, August 1, 2019
Removed the NullnessRawnessChecker. Use the NullnessChecker instead.
Closed issues:
435, 939, 1430, 1687, 1771, 1902, 2173, 2345, 2470, 2534, 2606, 2613, 2619,
2633, 2638.
---------------------------------------------------------------------------
Version 2.9.0, July 3, 2019
Renamed the Signedness Checker's @Constant annotation to @SignednessGlb.
Introduced an alias, @SignedPositive, for use by programmers.
Annotated the first argument of Opt.get and Opt.orElseThrow as @NonNull.
Removed meta-annotation @ImplicitFor:
* Use the new meta-annotation @QualifierForLiteral to replace
@ImplicitFor(literals, stringpatterns).
* Use the meta-annotation @DefaultFor to replace @ImplicitFor(typeKinds,
types).
* Use the new meta-annotation @UpperBoundFor to specify a qualifier upper
bound for certain types.
* You can completely remove
@ImplicitFor(typeNames = Void.class, literals = LiteralKind.NULL)
on bottom qualifiers.
@DefaultFor(types = Void.class)
and
@QualifierForLiterals(literals = LiteralKind.NULL)
are added to the bottom qualifier by default.
Add @DefaultQualifierOnUse and @NoDefaultQualifierOnUse type declaration annotations
New/changed error message keys:
* initialization.static.fields.uninitialized for uninitialized static fields
* unary.increment.type.incompatible and unary.decrement.type.incompatible
replace some occurrences of compound.assignment.type.incompatible
Implementation details:
* Renamed QualifierPolymorphism#annotate methods to resolve
* Renamed ImplicitsTreeAnnotator to LiteralTreeAnnotator
* Renamed ImplicitsTypeAnnotator to DefaultForTypeAnnotator
* Removed TypeUseLocation.TYPE_DECLARATION
* Removed InheritedFromClassAnnotator, replace with DefaultQualifierForUseTypeAnnotator
* Rename TreeUtils.isSuperCall and TreeUtils.isThisCall to
isSuperConstructorCall and isThisConstructorCall
Closed issues:
2247, 2391, 2409, 2434, 2451, 2457, 2468, 2484, 2485, 2493, 2505, 2536, 2537,
2540, 2541, 2564, 2565, 2585.
---------------------------------------------------------------------------
Version 2.8.2, June 3, 2019
The Signature Checker supports a new type, @FqBinaryName.
Added a template for a repository that you can use to write a custom checker.
Linked to the Checker Framework Gradle plugin, which makes it easy to run
a checker on a project that is built using the Gradle build tool.
Implementation detail: deprecated TreeUtils.skipParens in favor of
TreeUtils.withoutParens which has the same specification.
Closed issues:
2291, 2406, 2469, 2477, 2479, 2480, 2494, 2499.
---------------------------------------------------------------------------
Version 2.8.1, May 1, 2019
Moved text about the Purity Checker into its own chapter in the manual.
Closed issues:
660, 2030, 2223, 2240, 2244, 2375, 2407, 2410, 2415, 2420, 2421, 2446, 2447,
2460, 2462.
---------------------------------------------------------------------------
Version 2.8.0, April 3, 2019
Support `androidx.annotation.RecentlyNonNull` and `RecentlyNullable` (as of
2.6.0, but not previously documented).
The following qualifiers are now repeatable: `@DefaultQualifier`
`@EnsuresQualifierIf` `@EnsuresQualifier` `@RequiresQualifier`. Therefore,
users generally do not need to write the following wrapper annotations:
`@DefaultQualifiers` `@EnsuresQualifiersIf` `@EnsuresQualifiers`
`@RequiresQualifiers`.
New command-line option `-ArequirePrefixInWarningSuppressions` makes
`@SuppressWarnings` recognize warning keys of the form
"checkername:key.about.problem" but ignore warning keys of the form
"key.about.problem" without the checker name as a prefix.
New CONSTRUCTOR_RESULT enum constant in TypeUseLocation makes it possible to
set default annotations for constructor results.
Clarified the semantics of annotations on class and constructor declarations.
See Section 25.5 "Annotations on classes and constructors" in the manual.
Interface changes:
* Added protected methods to BaseTypeVisitor so that checkers can change the
checks for annotations on classes, constructor declarations, and constructor
invocations.
* Removed BaseTypeVisitor#checkAssignability and BaseTypeVisitor#isAssignable
methods.
* Renamed AnnotatedTypeFactory#getEnclosingMethod to
AnnotatedTypeFactory#getEnclosingElementForArtificialTree
Closed issues:
2159, 2230, 2318, 2324, 2330, 2334, 2343, 2344, 2353, 2366, 2367, 2370, 2371,
2385.
---------------------------------------------------------------------------
Version 2.7.0, March 1, 2019
The manual links to the AWS crypto policy compliance checker, which enforces
that no weak cipher algorithms are used with the Java crypto API.
The Nullness Checker supports RxJava annotations
io.reactivex.annotations.NonNull and io.reactivex.annotations.Nullable.
The checker-qual artifact (jar file) contains an OSGi manifest.
New TYPE_DECLARATION enum constant in TypeUseLocation makes it possible to
(for example) set defaults annotations for class/interface definitions.
Interface changes:
* Renamed the "value" element of the @HasSubsequence annotation to
"subsequence".
* Renamed @PolySignedness to @PolySigned.
* Renamed AnnotatedTypeFactory.ParameterizedMethodType to
ParameterizedExecutableType.
Added missing checks regarding annotations on classes, constructor
declarations, and constructor invocations. You may see new warnings.
Closed issues:
788, 1751, 2147, 2163, 2186, 2235, 2243, 2263, 2264, 2286, 2302, 2326, 2327.
---------------------------------------------------------------------------
Version 2.6.0, February 3, 2019
The manual includes a section about how to use Lombok and the Checker
Framework simultaneously.
Commons CSV has been added to the annotated libraries on Maven Central.
Some error messages have been changed to improve comprehensibility,
such as by adjusting wording or adding additional information.
Relevant to type system implementers:
Renamed method areSameIgnoringValues to areSameByName.
Closed issues: 2008, 2166, 2185, 2187, 2221, 2224, 2229, 2234, 2248.
Also fixed false negatives in handling of Map.get().
---------------------------------------------------------------------------
Version 2.5.8, December 5, 2018
The manual now links to the AWS KMS compliance checker, which enforces
that calls to AWS KMS only generate 256-bit keys.
Closed issues: 372, 1678, 2207, 2212, 2217.
---------------------------------------------------------------------------
Version 2.5.7, November 4, 2018
New @EnsuresKeyFor and @EnsuresKeyForIf method annotations permit
specifying the postcondition that a method gives some value a @KeyFor type.
The manual links to the Rx Thread & Effect Checker, which enforces
UI Thread safety properties for stream-based Android applications.
Closed issues:
1014, 2151, 2178, 2180, 2183, 2188, 2190, 2195, 2196, 2198, 2199
---------------------------------------------------------------------------
Version 2.5.6, October 3, 2018
Introduce checker-qual-android artifact that is just like the checker-qual
artifact, but the qualifiers have classfile retention. This is useful for
Android projects.
Remove the checker-compat-qual artifact, which was only useful for Java 7,
which the Checker Framework no longer supports. It remains available on
Maven Central, with versions 2.5.5 and earlier.
Closed issues:
2135, 2157, 2158, 2164, 2171.
---------------------------------------------------------------------------
Version 2.5.5, August 30, 2018
Implicit imports (deprecated in November 2014) are no longer supported.
Renamed the testlib Maven artifact to framework-test.
Removed command-line option -AprintErrorStack, which is now the default.
Added -AnoPrintErrorStack to disable it (which should be rare).
Replaced ErrorReporter class with BugInCF and UserError exceptions.
Closed issues:
1999, 2008, 2023, 2029, 2074, 2088, 2098, 2099, 2102, 2107.
---------------------------------------------------------------------------
Version 2.5.4, August 1, 2018
Closed issues:
2030, 2048, 2052, 2059, 2065, 2067, 2073, 2082.
---------------------------------------------------------------------------
Version 2.5.3, July 2, 2018
Closed issues:
266, 1248, 1678, 2010, 2011, 2018, 2020, 2046, 2047, 2054.
---------------------------------------------------------------------------
Version 2.5.2, June 1, 2018
In the Map Key Checker, null is now @UnknownKeyFor. See the "Map Key Checker"
chapter in the manual for more details.
Closed issues:
370, 469, 1701, 1916, 1922, 1959, 1976, 1978, 1981, 1983, 1984, 1991, 1992.
---------------------------------------------------------------------------
Version 2.5.1, May 1, 2018
Added a Maven artifact of the Checker Framework testing library, testlib.
Closed issues:
849, 1739, 1838, 1847, 1890, 1901, 1911, 1912, 1913, 1934, 1936, 1941, 1942,
1945, 1946, 1948, 1949, 1952, 1953, 1956, 1958.
---------------------------------------------------------------------------
Version 2.5.0, April 2, 2018
Declaration annotations that are aliases for type annotations are now treated
as if they apply to the top-level type. See "Declaration annotations" section
in the "Warnings" chapter in the manual for more details.
Ended support for annotations in comments. See "Migrating away from
annotations in comments" section in the "Handling legacy code" chapter in the
manual for instructions on how to remove annotations from comments.
Closed issues:
515, 1667, 1739, 1776, 1819, 1863, 1864, 1865, 1866, 1867, 1870, 1876, 1879,
1882, 1898, 1903, 1905, 1906, 1910, 1914, 1915, 1920.
---------------------------------------------------------------------------
Version 2.4.0, March 1, 2018
Added the Index Checker, which eliminates ArrayIndexOutOfBoundsException.
Added the Optional Checker, which verifies uses of Java 8's Optional class.
Removed the Linear Checker, whose implementation was inconsistent with its
documentation.
Added a @QualifierArgument annotation to be used on pre- and postcondition
annotations created by @PreconditionAnnotation, @PostconditionAnnotation,
and @ConditionalPostconditionAnnotation. This allows qualifiers with
arguments to be used in pre- and postconditions.
Added new type @InternalFormForNonArray to the Signature Checker
Moved annotated libraries from checker/lib/*.jar to the Central Repository:
https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.checkerframework.annotatedlib%22
Moved the Javadoc stub file from checker/lib/javadoc.astub to
checker/resources/javadoc.astub.
Simplified the instructions for running the Checker Framework with Gradle.
The Checker Framework Eclipse plugin is no longer released nor supported.
Closed issues:
65, 66, 100, 108, 175, 184, 190, 194, 209, 239, 260, 270, 274, 293, 302, 303,
306, 321, 325, 341, 356, 360, 361, 371, 383, 385, 391, 397, 398, 410, 423, 424,
431, 430, 432, 548, 1131, 1148, 1213, 1455, 1504, 1642, 1685, 1770, 1796, 1797,
1801, 1809, 1810, 1815, 1817, 1818, 1823, 1831, 1837, 1839, 1850, 1851, 1852,
1861.
---------------------------------------------------------------------------
Version 2.3.2, February 1, 2018
Closed issues:
946, 1133, 1232, 1319, 1625, 1633, 1696, 1709, 1712, 1734, 1738, 1749, 1754,
1760, 1761, 1768, 1769, 1781.
---------------------------------------------------------------------------
Version 2.3.1, January 2, 2018
Closed issues:
1695, 1696, 1697, 1698, 1705, 1708, 1711, 1714, 1715, 1724.
---------------------------------------------------------------------------
Version 2.3.0, December 1, 2017
Removed the deprecated @LazyNonNull type qualifier.
Deprecated most methods in InternalUtils and moved them to either
TreeUtils or TypesUtils. Adapted a few method names and parameter
orders for consistency.
Closed issues:
951, 1356, 1495, 1602, 1605, 1623, 1628, 1636, 1641, 1653, 1655, 1664, 1665,
1681, 1684, 1688, 1690.
---------------------------------------------------------------------------
Version 2.2.2, November 2, 2017
The Interning Checker supports a new annotation, @InternedDistinct, which
indicates that the value is not equals() to any other value.
An annotated version of the Commons IO library appears in checker/lib/ .
Closed issue 1586, which required re-opening issues 293 and 341 until
proper fixes for those are implemented.
Closed issues:
1386, 1389, 1423, 1520, 1529, 1530, 1531, 1546, 1553, 1555, 1565, 1570, 1579,
1580, 1582, 1585, 1586, 1587, 1598, 1609, 1615, 1617.
---------------------------------------------------------------------------
Version 2.2.1, September 29, 2017
Deprecated some methods in AnnotatedTypeMirror and AnnotationUtils, to
be removed after the 2.2.1 release.
The qualifiers and utility classes in checker-qual.jar are compiled to Java 8
byte code. A new jar, checker-qual7.jar, includes the qualifiers and utility
classes compiled to Java 7 byte code.
Closed issues:
724, 1431, 1442, 1459, 1464, 1482, 1496, 1499, 1500, 1506, 1507, 1510, 1512,
1522, 1526, 1528, 1532, 1535, 1542, 1543.
---------------------------------------------------------------------------
Version 2.2.0, September 5, 2017
A Java 8 JVM is required to run the Checker Framework.
You can still typecheck and compile Java 7 (or earlier) code.
With the "-target 7" flag, the resulting .class files still run with JDK 7.
The stub file format has changed to be more similar to regular Java syntax.
Most notably, receiver annotations are written using standard Java 8 syntax
(a special first formal paramter named "this") and inner classes are written
using standard Java syntax (rather than at the top level using a name that
contains "$". You need to update your stub files to conform to the new syntax.
Closed issues:
220, 293, 297, 341, 375, 407, 536, 571, 798, 867, 1180, 1214, 1218, 1371, 1411,
1427, 1428, 1435, 1438, 1450, 1456, 1460, 1466, 1473, 1474.
---------------------------------------------------------------------------
Version 2.1.14, 3 August 2017
Nullness Checker change to annotated JDK: The type argument to the Class,
Constructor, and Optional classes may now be annotated as @Nullable or
@NonNull. The nullness of the type argument doesn't matter, but this
enables easier integration with generic clients.
Many crashes and false positives associated with uninferred method type
arguments have been correct. By default, uninferred method type arguments,
which can happen with Java 8 style target type contexts, are silently ignored.
Use the option -AconservativeUninferredTypeArguments to see warnings about
method calls where the Checker Framework fails to infer type arguments.
Closed issues:
753, 804, 961, 1032, 1062, 1066, 1098, 1209, 1280, 1316, 1329, 1355, 1365,
1366, 1367, 1377, 1379, 1382, 1384, 1397, 1398, 1399, 1402, 1404, 1406, 1407.
---------------------------------------------------------------------------
Version 2.1.13, 3 July 2017
Verified that the Checker Framework builds from source on Windows Subsystem
for Linux, on Windows 10 Creators Edition.
The manual explains how to configure Android projects that use Android Studio
3.0 and Android Gradle Plugin 3.0.0, which support type annotations.
Closed issues:
146, 1264, 1275, 1290, 1303, 1308, 1310, 1312, 1313, 1315, 1323, 1324, 1331,
1332, 1333, 1334, 1347, 1357, 1372.
---------------------------------------------------------------------------
Version 2.1.12, 1 June 2017
The manual links to Glacier, a class immutability checker.
The stubparser license has been updated. You can now use stubparser under
either the LGPL or the Apache license, whichever you prefer.
Closed issues:
254, 1201, 1229, 1236, 1239, 1240, 1257, 1265, 1270, 1271, 1272, 1274, 1288,
1291, 1299, 1304, 1305.
---------------------------------------------------------------------------
Version 2.1.11, 1 May 2017
The manual contains new FAQ (frequently asked questions) sections about
false positive warnings and about inference for field types.
Closed issues:
989, 1096, 1136, 1228.
---------------------------------------------------------------------------
Version 2.1.10, 3 April 2017
The Constant Value Checker, which performs constant propagation, has been
extended to perform interval analysis -- that is, it determines, for each
expression, a statically-known lower and upper bound. Use the new
@IntRange annotation to express this. Thanks to Jiasen (Jason) Xu for this
feature.
Closed issues:
134, 216, 227, 307, 334, 437, 445, 718, 1044, 1045, 1051, 1052, 1054, 1055,
1059, 1077, 1087, 1102, 1108, 1110, 1111, 1120, 1124, 1127, 1132.
---------------------------------------------------------------------------
Version 2.1.9, 1 March 2017
By default, uninferred method type arguments, which can happen with Java 8
style target type contexts, are silently ignored, removing many false
positives. The new option -AconservativeUninferredTypeArguments can be used to
get the conservative behavior.
Closed issues:
1006, 1011, 1015, 1027, 1035, 1036, 1037, 1039, 1043, 1046, 1049, 1053, 1072,
1084.
---------------------------------------------------------------------------
Version 2.1.8, 20 January 2017
The Checker Framework webpage has moved to https://checkerframework.org/.
Old URLs should redirect to the new one, but please update your links
and let us know if any old links are broken rather than redirecting.
The documentation has been reorganized in the Checker Framework repository.
The manual, tutorial, and webpages now appear under checker-framework/docs/.
Closed issues:
770, 1003, 1012.
---------------------------------------------------------------------------
Version 2.1.7, 3 January 2017
Manual improvements:
* Added a link to jOOQ's SQL checker.
* Documented the `-AprintVerboseGenerics` command-line option.
* Better explanation of relationship between Fake Enum and Subtyping Checkers.
Closed issues:
154, 322, 402, 404, 433, 531, 578, 720, 795, 916, 953, 973, 974, 975, 976,
980, 988, 1000.
---------------------------------------------------------------------------
Version 2.1.6, 1 December 2016
Closed issues:
412, 475.
---------------------------------------------------------------------------
Version 2.1.5, 2 November 2016
The new class org.checkerframework.checker.nullness.Opt provides every
method in Java 8's java.util.Optional class, but written for possibly-null
references rather than for the Optional type. This can shorten code that
manipulates possibly-null references.
In bytecode, type variable upper bounds of type Object may or may not have
been explicitly written. The Checker Framework now assumes they were not
written explicitly in source code and defaults them as implicit upper bounds.
The manual describes how to run a checker within the NetBeans IDE.
The manual describes two approaches to creating a type alias or typedef.
Closed issues:
643, 775, 887, 906, 941.
---------------------------------------------------------------------------
Version 2.1.4, 3 October 2016
Closed issues:
885, 886, 919.
---------------------------------------------------------------------------
Version 2.1.3, 16 September 2016
Closed issues:
122, 488, 495, 580, 618, 647, 713, 764, 818, 872, 893, 894, 901, 902, 903,
905, 913.
---------------------------------------------------------------------------
Version 2.1.2, 1 September 2016
Closed issues:
182, 367, 712, 811, 846, 857, 858, 863, 870, 871, 878, 883, 888.
---------------------------------------------------------------------------
Version 2.1.1, 1 August 2016
The codebase conforms to a consistent coding style, which is enforced by
a git pre-commit hook.
AnnotatedTypeFactory#createSupportedTypeQualifiers() must now return a mutable
list. Checkers that override this method will have to be changed.
Closed issues:
384, 590, 681, 790, 805, 809, 810, 820, 824, 826, 829, 838, 845, 850, 856.
---------------------------------------------------------------------------
Version 2.1.0, 1 July 2016
The new Signedness Checker prevents mixing of unsigned and signed
values and prevents meaningless operations on unsigned values.
The Lock Checker expresses the annotated variable as `<self>`;
previously it used `itself`, which may conflict with an identifier.
Closed issues:
166, 273, 358, 408, 471, 484, 594, 625, 692, 700, 701, 711, 717, 752, 756,
759, 763, 767, 779, 783, 794, 807, 808.
---------------------------------------------------------------------------
Version 2.0.1, 1 June 2016
We renamed method annotateImplicit to addComputedTypeAnnotations. If you
have implemented a checker, you need to change occurrences of
annotateImplicit to addComputedTypeAnnotations.
The Checker Framework (checker.jar) is now placed on the processorpath
during compilation. Previously, it was placed on the classpath. The
qualifiers (checker-qual.jar) remain on the classpath. This change should
reduce conflicts between your code and the Checker Framework. If your code
depends on classes in the Checker Framework, then you should add those
classes to the classpath when you run the compiler.
Closed issues:
171, 250, 291, 523, 577, 672, 680, 688, 689, 690, 691, 695, 696, 698, 702,
704, 705, 706, 707, 720, 721, 723, 728, 736, 738, 740.
---------------------------------------------------------------------------
Version 2.0.0, 2 May 2016
Inference:
* The infer-and-annotate.sh script infers annotations and inserts them in
your source code. This can reduce the burden of writing annotations and
let you get started using a type system more quickly. See the
"Whole-program inference" section in the manual for details.
Type systems:
* The Lock Checker has been replaced by a new implementation that provides
a stronger guarantee. The old Lock Checker prevented two threads from
simultaneously using a given variable, but race conditions were still
possible due to aliases. The new Lock Checker prevents two threads from
simultaneously dereferencing a given value, and thus prevents race
conditions. For details, see the "Lock Checker" chapter in the manual,
which has been rewritten to describe the new semantics.
* The top type qualifier for the Signature String type system has been
renamed from @UnannotatedString to @SignatureUnknown. You shouldn't
ever write this annotation, but if you perform separate compilation (for
instance, if you do type-checking with the Signature String Checker
against a library that is annotated with Signature String annotations),
then you need to re-compile the library.
* The IGJ, OIGJ, and Javari Checkers are no longer distributed with the
Checker Framework. If you wish to use them, install version 1.9.13 of
the Checker Framework. The implementations have been removed because
they were not being maintained. The type systems are valuable, but the
type-checkers should be rewritten from scratch.
Documentation improvements:
* New manual section "Tips for creating a checker" shows how to break down
the implementation of a type system into small, manageable pieces.
* Improved instructions for using Maven and Gradle, including for Android
code.
Tool changes:
* The Checker Framework Live Demo webpage lets you try the Checker
Framework without installing it: http://eisop.uwaterloo.ca/live/
* New command-line arguments -Acfgviz and -Averbosecfg enable better
debugging of the control-flow-graph generation step of type-checking.
* New command-line argument -Ainfer is used by the infer-and-annotate.sh
script that performs type inference.
Closed issues:
69, 86, 199, 299, 329, 421, 428, 557, 564, 573, 579, 665, 668, 669, 670, 671.
---------------------------------------------------------------------------
Version 1.9.13, 1 April 2016
Documentation:
* Clarified Maven documentation about use of annotations in comments.
* Added FAQ about annotating fully-qualified type names.
Closed issues: 438, 572, 579, 607, 624, 631.
---------------------------------------------------------------------------
Version 1.9.12, 1 March 2016
The Checker Framework distribution contains annotated versions
of libraries in directory checker-framework/checker/lib/.
During type-checking, you should put these versions first on your classpath,
to obtain more precise type-checking with fewer false positive warnings.
tools.jar is no longer required to be on the classpath when using
checker-qual.jar
The Signature String Checker supports two new string representations of a
Java type: @InternalForm and @ClassGetSimpleName.
The manual documents how to run a pluggable type-checker in IntelliJ IDEA.
The instructions on how to run a type-checker in Gradle have been updated to
use the artifacts in Maven Central. Examples using the instructions have been
added under checker-framework/docs/examples/GradleExamples/.
Renamed enum DefaultLocation to TypeUseLocation.
Closed issues: 130, 263, 345, 458, 559, 559, 574, 582, 596.
---------------------------------------------------------------------------
Version 1.9.11, 1 February 2016
Renamed and merged -AuseSafeDefaultsForUnannotatedSourceCode and
-AsafeDefaultsForUnannotatedBytecode command-line options to
-AuseDefaultsForUncheckedCode that takes arguments source and bytecode.
For type-system developers:
* The previously deprecated
org.checkerframework.framework.qual.TypeQualifier{s} annotations
were removed.
* Every type system uses the CLIMB-to-top defaulting scheme, unless it
explicitly specifies a different one. Previously a type system needed
to explicitly request CLIMB-to-top, but now it is the default.
Closed issues: 524, 563, 568.
---------------------------------------------------------------------------
Version 1.9.10, 4 January 2016
The Checker Framework distribution files now contain a version number:
for example, checker-framework-1.9.9.zip rather than checker-framework.zip.
The Nullness Checker supports the org.eclipse.jgit.annotations.Nullable and
NonNull annotations.
Buildfiles do less unnecessary recomputation.
Documentation:
* Documented how to initialize circular data structures in the
Initialization type system.
* Linked to David Bürgin's Nullness Checker tutorial at
https://github.com/glts/safer-spring-petclinic/wiki
* Acknowledged more contributors in the manual.
For type-system developers:
* The org.checkerframework.framework.qual.TypeQualifier{s} annotations are
now deprecated. To indicate which annotations a checker supports, see
https://checkerframework.org/manual/#creating-indicating-supported-annotations .
Support for TypeQualifier{s} will be removed in the next release.
* Renamed
org.checkerframework.framework.qual.Default{,Qualifier}ForUnannotatedCode to
DefaultInUncheckedCodeFor and DefaultQualifierInHierarchyInUncheckedCode.
Closed issues: 169, 363, 448, 478, 496, 516, 529.
---------------------------------------------------------------------------
Version 1.9.9, 1 December 2015
Fixed issues: 511, 513, 514, 455, 527.
Removed the javac_maven script and batch file,
which had been previously deprecated.
---------------------------------------------------------------------------
Version 1.9.8, 9 November 2015
Field initialization warnings can now be suppressed for a single field at a
time, by placing @SuppressWarnings("initialization") on the field declaration.
Updated Maven instructions to no longer require a script.
Added an example of how to use the instructions under
docs/examples/MavenExample.
The javac_maven script (and batch file) are deprecated and will be
removed as of December 2015.
Fixed issues: 487, 500, 502.
---------------------------------------------------------------------------
Version 1.9.7, 24 October 2015
Fixed issues: 291, 474.
----------------------------------------------------------------------
Version 1.9.6, 8 October 2015
Fixed issue: 460.
----------------------------------------------------------------------
Version 1.9.5, 1 September 2015
Test Framework Updates:
* The test framework has been refactored to improve extensibility.
* Tests that previously extended ParameterizedCheckerTest or
CheckerTest should extend either CheckerFrameworkTest or nothing.
* If a test used methods that were previously found on
CheckerTest, you may find them in TestUtilities.
Fixed issues: 438, 457, 459.
----------------------------------------------------------------------
Version 1.9.4, 4 August 2015
Documented the notion of a compound checker, which depends on other checkers
and automatically runs them.
Renamed -AuseConservativeDefaultsForUnannotatedSourceCode command-line
option to -AuseSafeDefaultsForUnannotatedSourceCode
Moved the Checker Framework version control repository from Google Code to
GitHub, and from the Mercurial version control system to Git. If you have
cloned the old repository, then discard your old clone and create a new one
using this command:
git clone https://github.com/typetools/checker-framework.git
Fixed issues: 427, 429, 434, 442, 450.
----------------------------------------------------------------------
Version 1.9.3, 1 July 2015
New command-line options:
* -AsafeDefaultsForUnannotatedBytecode causes a checker to use conservative
defaults for .class files that were compiled without running the given
checker. Without this option, type-checking is unsound (that is, there
might be errors at run time even though the checker issues no warnings).
* -AuseConservativeDefaultsForUnannotatedSourceCode uses conservative
annotations for unannotated type uses. Use this when compiling a library in
which some but not all classes are annotated.
Various bug fixes and documentation improvements.
Fixed issues: 436.
----------------------------------------------------------------------
Version 1.9.2, 1 June 2015
Internationalization Format String Checker:
This new type-checker prevents use of incorrect internationalization
format strings.
Fixed issues: 434.
----------------------------------------------------------------------
Version 1.9.1, 1 May 2015
New FAQ entry:
"How does the Checker Framework compare with Eclipse's null analysis?"
----------------------------------------------------------------------
Version 1.9.0, 17 April 2015
Bug fixes for generics, especially type parameters:
* Manual chapter 21 "Generics and polymorphism" has been expanded,
and it gives more information on annotating type parameters.
* The qualifier on a type parameter (e.g. <@HERE T> ) only applies
to the lower bound of that type parameter. Previously it also
applied to the upper bound.
* Unannotated, unbounded wildcards are now qualified with the
annotations of the type parameter to which they are an argument.
See the new manual section 23.3.4 for more details.
* Warning "bound.type.incompatible" is issued if the lower bound of
a type parameter or wildcard is a supertype of its upper bound,
e.g. <@Nullable T extends @NonNull Object>
* Method type argument inference has been improved. Fewer warnings
should be issued when method invocations omit type arguments.
* Added command-line option -AprintVerboseGenerics to print more
information about type parameters and wildcards when they appear
in warning messages.
Reflection resolution:
If you supply the -AresolveReflection command-line option, the Checker
Framework attempts to resolve reflection. This reduces the number of
false positive warnings caused by reflection.
The documentation for the Map Key Checker has been moved into its own
chapter in the manual.
Fixed issues: 221, 241, 313, 314, 328, 335, 337, 338, 339, 355, 369,
376, 378, 386, 388, 389, 393, 403, 404, 413, 414, 415,
417, 418, 420, 421, 422, 426.
----------------------------------------------------------------------
Version 1.8.11, 2 March 2015
Fixed issues: 396, 400, 401.
----------------------------------------------------------------------
Version 1.8.10, 30 January 2015
Fixed issues: 37, 127, 350, 364, 365, 387, 392, 395.
----------------------------------------------------------------------
Version 1.8.9, 19 December 2014
Aliasing Checker:
This new type-checker ensures that an expression has no aliases.
Fixed issues: 362, 380, 382.
----------------------------------------------------------------------
Version 1.8.8, 26 November 2014
@SuppressWarnings("all") suppresses all Checker Framework warnings.
Implicit imports are deprecated, including the jsr308_imports environment
variable and the -jsr308_imports ... and -Djsr308.imports=... command-line
options.
For checkers bundled with the Checker Framework, package names may now
be omitted when running from the command line.
E.g.
javac -processor NullnessChecker MyFile.java
The Nullness checker supports Android annotations
android.support.annotation.NonNull and android.support.annotation.Nullable.
Fixed issues: 366, 379.
----------------------------------------------------------------------
Version 1.8.7, 30 October 2014
Fix performance regression introduced in release 1.8.6.
Nullness Checker:
* Updated Nullness annotations in the annotated JDK.
See issues: 336, 340, 374.
* String concatenations with null literals are now @NonNull
rather than @Nullable. See issue 357.
Fixed issues: 200, 300, 332, 336, 340, 357, 359, 373, 374.
----------------------------------------------------------------------
Version 1.8.6, 25 September 2014
Method Reference and Lambda Expression Support:
The Checker Framework now supports type-checking method references
and lambda expressions to ensure they are congruent with the
functional interface they are assigned to. The bodies of lambda expressions
are also now type-checked similarly to regular method bodies.
Dataflow:
* Handling of the following language features has been improved:
boxed Booleans, finally blocks, switch statements, type casts, enhanced
for loops
* Performance improvements
Annotations:
The checker-compat-qual.jar is now included with the Checker Framework
release. It can also be found in Maven Central at the coordinates:
org.checkerframework:checker-compat-qual
Annotations in checker-compat-qual.jar do not require Java 8 but
can only be placed in annotation locations valid in Java 7.
----------------------------------------------------------------------
Version 1.8.5, 29 August 2014
Eclipse Plugin:
All checkers in the Checker Framework manual now appear in the
Eclipse plugin by default. Users no longer have to include
checker.jar on their classpath to run any of the built-in checkers.
Improved Java 7 compatibility and introduced Java 7 compliant
annotations for the Nullness Checker. Please see the section on
"Class-file compatibility with Java 7" in the manual for more details.
Fixed issue 347.
----------------------------------------------------------------------
Version 1.8.4, 1 August 2014
The new Constant Value Checker is a constant propagation analysis: it
determines which variable values can be known at compile time.
Overriding methods now inherit declaration annotations from methods they
override, if the declaration annotation is meta-annotate with
@InheritedAnnotation. In particular, the purity annotations @SideEffectFree,
@Deterministic, and @Pure are inherited.
Command-line options:
* Renamed the -AenablePurity command-line flag to -AcheckPurityAnnotations.
* Added a command-line option -AoutputArgsToFile to output all command-line
options passed to the compiler to a file. This is especially useful when
debugging Maven compilation.
Annotations:
These changes are relevant only to people who wish to use pluggable
type-checking with a standard Java 7 toolset. (If you are not having
trouble with your Java 7 JVM, then you don't care about them.)
* Made clean-room reimplementations of nullness-related annotations
compatible with Java 7 JVMs, by removing TYPE_USE as a target.
* Added a new set of Java 7 compatibility annotations for the Nullness Checker
in the org.checkerframework.checker.nullness.compatqual package. These
annotations do not require Java 8 but can only be placed in annotation
locations valid in Java 7.
Java 8 support:
The Checker Framework no longer crashes when type-checking code with lambda
expressions, but it does issue a lambda.unsupported warning when
type-checking code containing lambda expressions. Full support for
type-checking lambda expressions will appear in a future release.
Fixed issue 343.
----------------------------------------------------------------------
Version 1.8.3, 1 July 2014
Updated the Initialization Checker section in the manual with
a new introduction paragraph.
Removed the Maven plugin section from the manual as the plugin is
no longer maintained and the final release was on June 2, 2014.
The javac_maven script (and batch file) are available to use
the Checker Framework from Maven.
Fixed issue 331.
----------------------------------------------------------------------
Version 1.8.2, 2 Jun 2014
Converted from using rt.jar to ct.sym for creating the annotated jdk.
Using the annotated jdk on the bootclasspath of a VM will cause the
vm to crash immediately.
The Lock Checker has been rewritten to support dataflow analysis.
It can now understand conditional expressions, for example, and
knows that "lock" is held in the body of statements like
"if (lock.tryLock()) { ... }"
The Lock Checker chapter in the manual has been updated accordingly
and describes the new Lock Checker features in detail.
Provided a javac_maven script (and batch file) to make it simpler
to use the Checker Framework from Maven. The Maven plug-in is deprecated
and will be removed as of July 1, 2014. Added an explanation of how
to use the script in the Maven section of the manual.
The Checker Framework installation instructions in the manual have
been updated.
Fixed issues: 312, 315, 316, 318, 319, 324, 326, 327.
----------------------------------------------------------------------
Version 1.8.1, 1 May 2014
Support to directly use the Java 8 javac in addition to jsr308-langtools.
Added docs/examples directory to checker-framework.zip.
New section in the manual describing the contents of checker-framework.zip.
Fixed issues: 204, 304, 320.
----------------------------------------------------------------------
Version 1.8.0, 2 April 2014
Added the GUI Effect Checker, which prevents "invalid thread access" errors
when a background thread in a GUI attempts to access the UI.
Changed the Java package of all type-checkers and qualifiers. The package
"checkers" has been renamed to "org.checkerframeork.checker". This
requires you to change your import statements, such as from
import checkers.nullness.quals.*;
to
import org.checkerframework.checker.nullness.qual.*;
It also requires you to change command-line invocations of javac, such as from
javac -processor checkers.nullness.NullnessChecker ...
to
javac -processor org.checkerframework.checker.nullness.NullnessChecker ...
Restructured the Checker Framework project and package layout,
using the org.checkerframework prefix.
----------------------------------------------------------------------
Version 1.7.5, 5 March 2014
Minor improvements to documentation and demos.
Support a few new units in the UnitsChecker.
----------------------------------------------------------------------
Version 1.7.4, 19 February 2014
Error messages now display the error key that can be used in
SuppressWarning annotations. Use -AshowSuppressWarningKeys to
show additional keys.
Defaulted type qualifiers are now stored in the Element and written
to the final bytecode.
Reduce special treatment of checkers.quals.Unqualified.
Fixed issues: 170, 240, 265, 281.
----------------------------------------------------------------------
Version 1.7.3, 4 February 2014
Fixes for Issues 210, 253, 280, 288.
Manual:
Improved discussion of checker guarantees.
Maven Plugin:
Added option useJavacOutput to display exact compiler output.
Eclipse Plugin:
Added the Format String Checker to the list of built-in checkers.
----------------------------------------------------------------------
Version 1.7.2, 2 January 2014
Fixed issues: 289, 292, 295, 296, 298.
----------------------------------------------------------------------
Version 1.7.1, 9 December 2013
Fixes for Issues 141, 145, 257, 261, 269, 267, 275, 278, 282, 283, 284, 285.
Implementation details:
Renamed AbstractBasicAnnotatedTypeFactory to GenericAnnotatedTypeFactory
----------------------------------------------------------------------
Version 1.7.0, 23 October 2013
Format String Checker:
This new type-checker ensures that format methods, such as
System.out.printf, are invoked with correct arguments.
Renamed the Basic Checker to the Subtyping Checker.
Reimplemented the dataflow analysis that performs flow-sensitive type
refinement. This fixes many bugs, improves precision, and adds features.
Many more Java expressions can be written as annotation arguments.
Initialization Checker:
This new abstract type-checker verifies initialization properties. It
needs to be combined with another type system whose proper initialization
should be checked. This is the new default initialzation checker for the
Nullness Checker. It is based on the "Freedom Before Commitment" approach.
Renamed method annotations used by the Nullness Checker:
@AssertNonNullAfter => @EnsuresNonNull
@NonNullOnEntry => @RequiresNonNull
@AssertNonNullIfTrue(...) => @IfMethodReturnsFalseEnsuresNonNull
@AssertNonNullIfFalse(...) => @IfMethodReturnsFalseEnsuresNonNull
@LazyNonNull => @MonotonicNonNull
@AssertParametersNonNull => [no replacement]
Removed annotations used by the Nullness Checker:
@AssertParametersNonNull
Renamed type annotations used by the Initialization Checker:
@NonRaw => @Initialized
@Raw => @UnknownInitialization
new annotation @UnderInitialization
The old Initialization Checker (that uses @Raw and @NonRaw) can be invoked
by invoking the NullnessRawnessChecker rather than the NullnessChecker.
Purity (side effect) analysis uses new annotations @SideEffectFree,
@Deterministic, and @TerminatesExecution; @Pure means both @SideEffectFree
and @Deterministic.
Pre- and postconditions about type qualifiers are available for any type system
through @RequiresQualifier, @EnsuresQualifier and @EnsuresQualifierIf. The
contract annotations for the Nullness Checker (e.g. @EnsuresNonNull) are now
only a special case of these general purpose annotations.
The meta-annotations @PreconditionAnnotation, @PostconditionAnnotation, and
@ConditionalPostconditionAnnotation can be used to create more special-case
annotations for other type systems.
Renamed assertion comment string used by all checkers:
@SuppressWarnings => @AssumeAssertion
To use an assert statement to suppress warnings, the assertion message must
include the string "@AssumeAssertion(warningkey)". Previously, just the
warning key sufficed, but the string @SuppressWarnings(warningkey) was
recommended.
New command-line options:
-AonlyDefs and -AonlyUses complement existing -AskipDefs and -AskipUses
-AsuppressWarnings Suppress warnings matching the given key
-AassumeSideEffectFree Unsoundly assume that every method is side-effect-free
-AignoreRawTypeArguments Ignore subtype tests for type arguments that
were inferred for a raw type
-AenablePurity Check the bodies of methods marked as pure
(@SideEffectFree or @Deterministic)
-AsuggestPureMethods Suggest methods that could be marked as pure
-AassumeAssertionsAreEnabled, -AassumeAssertionsAreDisabled Whether to
assume that assertions are enabled or disabled
-AconcurrentSemantics Whether to assume concurrent semantics
-Anocheckjdk Don't err if no annotated JDK can be found
-Aflowdotdir Create an image of the control flow graph
-AinvariantArrays replaces -Alint=arrays:invariant
-AcheckCastElementType replaces -Alint=cast:strict
Manual:
New manual section about array types.
New FAQ entries: "Which checker should I start with?", "How can I handle
typestate, or phases of my program with different data properties?",
"What is the meaning of a type qualifier at a class declaration?"
Reorganized FAQ chapter into sections.
Many other improvements.
----------------------------------------------------------------------
Version 1.6.7, 28 August 2013
User-visible framework improvements:
Improve the error message produced by -Adetailedmsgtext
Bug fixes:
Fix issue #245: anonymous classes were skipped by default
----------------------------------------------------------------------
Version 1.6.6, 01 August 2013
Documentation:
The Checker Framework manual has been improved. Changes include:
more troubleshooting tips to the Checker Framework manual, an improved
discussion on qualifier bounds, more examples, improved formatting, and more.
An FAQ entry has been added to discuss JSR305.
Minor clarifications have been added to the Checker Framework tutorial.
----------------------------------------------------------------------
Version 1.6.5, 01 July 2013
User-visible framework improvements:
Stub files now support static imports.
Maven plugin:
Maven plugin will now issue a warning rather than quit when zero checkers are specified in a project's pom.xml.
Documentation:
Improved the Maven plugin instructions in the Checker Framework manual.
Added documentation for the -XDTA:noannotationsincomments compiler flag.
Internal framework improvements:
Improved Maven-plugin developer documentation.
----------------------------------------------------------------------
Version 1.6.4, 01 June 2013
User-visible framework improvements:
StubGenerator now generates stubs that can be read by the StubParser.
Maven plugin:
The Maven plugin no longer requires the Maven project's output directory to exist in order to run the Checker Framework. However, if you ask the Checker Framework to generate class files then the output directory will be created.
Documentation:
Improved the Maven plugin instructions in the Checker Framework manual.
Improved the discussion of why to define both a bottom and a top qualifier in the Checker Framework manual.
Update FAQ to discuss that some other tools incorrectly interpret array declarations.
----------------------------------------------------------------------
Version 1.6.3, 01 May 2013
Eclipse plugin bug fixes:
The javac argument files used by the Eclipse plugin now properly escape file paths. Windows users should no longer encounter errors about missing built-in checkers.
Documentation:
Add FAQ "What is the meaning of an annotation after a type?"
----------------------------------------------------------------------
Version 1.6.2, 04 Apr 2013
Eclipse plugin:
The "Additional compiler parameters" text field has now been replaced by a list. Parameters in this list may be activated/deactivated via checkbox.
Eclipse plugin bug fixes:
Classpaths and source files should now be correctly quoted when they contain spaces.
Internal framework improvements:
Update pom files to use the same update-version code as the Checker Framework "web" ant task. Remove pom specific update-version code.
Update build ant tasks to avoid re-running targets when executing tests from the release script.
----------------------------------------------------------------------
Version 1.6.1, 01 Mar 2013
User-visible framework improvements:
A number of error messages have been clarified.
Stub file now supports type annotations in front and after method type variable declarations.
You may now specify custom paths to javac.jar and jdk7.jar on the command line for non-standard installations.
Internal framework improvements:
Add shouldBeApplied method to avoid unnecessary scans in DefaultApplier and avoid annotating void types.
Add createQualifierDefaults and createQualifierPolymorphism factory methods.
Maven plugin:
Put Checker Framework jars at the beginning of classpath.
Added option to compile code in order to support checking for multi-module projects.
The plugin no longer copies the various Checker Framework maven artifacts to one location but instead takes advantage of the new custom path options for javac.jar and jdk7.jar.
The maven plugin no longer attempts to resolve jdk6.jar
Eclipse plugin:
Put Checker Framework jars at the beginning of classpath.
All files selected from a single project can now be checked. The previous behavior only checked the entire project or one file depending on the type of the first file selected.
Documentation:
Fixed broken links and incomplete URLs in the Checker Framework Manual.
Update FAQ to discuss that some other tools incorrectly interpret array declarations.
Bug fixes
----------------------------------------------------------------------
Version 1.6.0, 1 Feb 2013
User-visible framework improvements:
It is possible to use enum constants in stub files without requiring the fully qualified name, as was previously necessary.
Support build on a stock Java 8 OpenJDK.
Adapt to underlying jsr308-langtools changes.
The most visible change is syntax for fully-qualified types, from @A java.lang.Object to java.lang.@A Object.
JDK 7 is now required. The Checker Framework does not build or run on JDK 6.
Documentation:
A new tutorial is available at https://checkerframework.org/tutorial/
----------------------------------------------------------------------
Version 1.5.0, 14 Jan 2013
User-visible framework improvements:
To invoke the Checker Framework, call the main method of class
CheckerMain, which is a drop-in replacement for javac. This replaces
all previous techniques for invoking the Checker Framework. Users
should no longer provide any Checker Framework jars on the classpath or
bootclasspath. jsr308-all.jar has been removed.
The Checker Framework now works with both JDK 6 and JDK 7, without need
for user customization. The Checker Framework determines the
appropriate annotated JDK to use.
All jar files now reside in checker-framework/checkers/binary/.
Maven plugin:
Individual pom files (and artifacts in the Maven repository) for all
Checker Framework jar files.
Avoid too-long command lines on Windows.
See the Maven section of the manual for more details.
Eclipse plugin:
Avoid too-long command lines on Windows.
Other bug fixes and interface improvements.
Other framework improvements:
New -Adetailedmsgtext command-line option, intended for use by IDE plugins.
----------------------------------------------------------------------
Version 1.4.4, 1 Dec 2012
Internal framework improvements:
Add shutdown hook mechanism and use it for -AresourceStats resource
statistics flag.
Add -AstubWarnIfNotFound and -AstubDebug options to improve
warnings and debug information from the stub file parsing.
Ignore case when comparing error suppression keys.
Support the bottom type as subtype of any wildcard type.
Tool Integration Changes
The Maven plugin id has been changed to reflect standard Maven
naming conventions.
Eclipse and Maven plugin version numbers will now
track the Checker Framework version numbers.
Bug fixes.
----------------------------------------------------------------------
Version 1.4.3, 1 Nov 2012
Clarify license:
The Checker Framework is licensed under the GPL2. More permissive
licenses apply to annotations, tool plugins (Maven, Eclipse),
external libraries included with the Checker Framework, and examples in
the Checker Framework Manual.
Replaced all third-party annotations by cleanroom implementations, to
avoid any potential problems or confusion with licensing.
Aliased annotations:
Clarified that there is no need to rewrite your program. The Checker
Framework recognizes dozens of annotations used by other tools.
Improved documentation of Units Checker and Gradle Integration.
Improved developer documentation of Eclipse and Maven plugins.
Bug fixes.
----------------------------------------------------------------------
Version 1.4.2, 16 Oct 2012
External tool support:
Eclipse plug-in now works properly, due to many fixes
Regex Checker:
New CheckedPatternSyntaxException added to RegexUtil
Support new foreign annotations:
org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.annotation.NonNull
New FAQ: "What is a receiver?"
Make annotations use 1-based numbering for formal parameters:
Previously, due to a bug the annotations used 0-based numbering.
This change means that you need to rewrite annotations in the following ways:
@KeyFor("#3") => @KeyFor("#4")
@AssertNonNullIfTrue("#0") => @AssertNonNullIfTrue("#1")
@AssertNonNullIfTrue({"#0", "#1"}) => @AssertNonNullIfTrue({"#1", "#2"})
@AssertNonNullAfter("get(#2)") => @AssertNonNullAfter("get(#3)")
This command:
find . -type f -print | xargs perl -pi -e 's/("#)([0-9])(")/$1.($2+1).$3/eg'
handles the first two cases, which account for most uses. You would need
to handle any annotations like the last two cases in a different way,
such as by running
grep -r -n -E '\("[^"]+#[0-9][^A-Za-z]|\("#[0-9][^"]' .
and making manual changes to the matching lines. (It is possible to
provide a command that handles all cases, but it would be more likely to
make undesired changes.)
Whenever making automated changes, it is wise to save a copy of your
codebase, then compare it to the modified version so you can undo any
undesired changes. Also, avoid running the automated command over version
control files such as your .hg, .git, .svn, or CVS directory.
----------------------------------------------------------------------
Version 1.4.1, 29 Sep 2012
User-visible framework improvements:
Support stub files contained in .jar files.
Support aliasing for declaration annotations.
Updated the Maven plugin.
Code refactoring:
Make AnnotationUtils and AnnotatedTypes into stateless utility classes.
Instead, provide the necessary parameters for particular methods.
Make class AnnotationBuilder independent of AnnotationUtils.
Remove the ProcessingEnvironment from AnnotatedTypeMirror, which was
hardly used and can be replaced easily.
Used more consistent naming for a few more fields.
Moved AnnotatedTypes from package checkers.types to checkers.utils.
this required making a few methods in AnnotatedTypeFactory public,
which might require changes in downstream code.
Internal framework improvements:
Fixed Issues 136, 139, 142, 156.
Bug fixes and documentation improvements.
----------------------------------------------------------------------
Version 1.4.0, 11 Sep 2012
User-visible framework improvements:
Defaulting:
@DefaultQualifier annotations now use a Class instead of a String,
preventing simple typo errors.
@DefaultLocation extended with more constants.
TreeAnnotator propagates the least-upper-bound of the operands of
binary/compound operations, instead of taking the default qualifier.
Stub files now ignore the return type, allowing for files automatically
generated from other formats.
Type factories and type hierarchies:
Simplify AnnotatedTypeFactory constructors.
Add a GeneralAnnotatedTypeFactory that supports multiple type systems.
Improvements to QualifierHierarchy construction.
Type-checking improvements:
Propagate annotations from the sub-expression of a cast to its result.
Better handling of assignment context and improved inference of
array creation expressions.
Optional stricter checking of casts to array and generic types using
the new -Alint=cast:strict flag.
This will become the default in the future.
Code reorganization:
SourceChecker.initChecker no longer has a ProcessingEnvironment
parameter. The environment can now be accessed using the standard
processingEnv field (instead of the previous env field).
Classes com.sun.source.util.AbstractTypeProcessor and
checkers.util.AggregateChecker are now in package checkers.source.
Move isAssignable from the BaseTypeChecker to the BaseTypeVisitor; now
the Checker only consists of factories and logic is contained in the
Visitor.
Warning and error messages:
Issue a warning if an unsupported -Alint option is provided.
Improved error messages.
Maven plugin now works.
Nullness Checker:
Only allow creation of (implicitly) non-null objects.
Optionally forbid creation of arrays with @NonNull component type,
when flag -Alint=arrays:forbidnonnullcomponents is supplied.
This will become the default in the future.
Internal framework improvements:
Enable assertion checking.
Improve handling of annotated type variables.
Assignment context is now a type, not a tree.
Fix all compiler warnings.
----------------------------------------------------------------------
Version 1.3.1, 21 Jul 2012
Installation:
Clarify installation instructions for Windows. Remove javac.bat, which
worked for running distributed checkers but not for creating new checkers.
User-visible framework improvements:
Implement @PolyAll qualifier to vary over multiple type systems.
The Checker Framework is unsound due to Java's covariant array subtyping.
You can enable invariant array subtyping (for qualifiers only, not for
base Java types) with the command-line option -Alint=arrays:invariant.
This will become the default in the future.
Internal framework improvements:
Improve defaulting for multiple qualifier hierarchies.
Big refactoring of how qualifier hierarchies are built up.
Improvements to error handling output for unexpected exceptions.
Bug fixes and documentation improvements.
----------------------------------------------------------------------
Version 1.3.0, 3 Jul 2012
Annotation syntax changes, as mandated by the latest Type Annotations
(JSR 308) specification. The most important ones are:
- New receiver syntax, using "this" as a formal parameter name:
ReturnType methodname(@ReceiverAnnotation MyClass this, ...) { ... }
- Changed @Target default to be the Java 1.5 values
- UW extension: in addition to annotations in comments, support
special /*>>> */ comments to hide multiple tokens.
This is useful for the new receiver syntax and for import statements.
Framework improvements:
Adapt to annotation storage changes in jsr308-langtools 1.3.0.
Move type validation methods from the BaseTypeChecker to BaseTypeVisitor.
----------------------------------------------------------------------
Version 1.2.7, 14 May 2012
Regex Checker:
Add basic support for the concatenation of two non-regular expressions
that produce a valid regular expression.
Support "isRegex" in flow inference.
Framework improvements:
New @StubFiles annotation declaratively adds stub files to a checker.
Internal bug fixes:
Respect skipDefs and skipUses in NullnessFlow.
Support package annotations in stub files.
Better support for enums in annotation attributes.
Cleanups to how implicit receivers are determined.
----------------------------------------------------------------------
Version 1.2.6, 18 Mar 2012
Nullness Checker:
Correctly handle unboxing in more contexts (if, switch (Issue 129),
while loops, ...)
Regex Checker:
Add capturing groups parameter to Regex qualifier.
Count groups in String literals and String concatenation.
Verify group number to method calls that take a capturing group
number.
Update RegexUtil methods to take optional groups parameter.
Modify regex qualifier hierarchy to support groups parameter.
Add special case for Pattern.compile when called with Pattern.LITERAL flag.
Internal bug fixes:
Improve flow's support of annotations with parameters.
Fix generics corner cases (Issues 131, 132, 133, 135).
Support type annotations in annotations and type-check annotations.
Improve reflective look-up of visitors and factories.
Small cleanups.
----------------------------------------------------------------------
Version 1.2.5.1, 06 Feb 2012
Nullness Checker:
Correct the annotations on ThreadLocal and InheritableThreadLocal.
Internal bug fixes:
Expand release tests.
Compile release with JDK 6 to work on both JDK 6 and JDK 7.
----------------------------------------------------------------------
Version 1.2.5, 3 Feb 2012
Don't put classpath on the bootclasspath when invoking javac. This
prevents problems if, for example, android.jar is on the classpath.
New -jsr308_imports ... and -Djsr308.imports=... command-line options, for
specifying implicit imports from the command line. This is needed by Maven.
New -Aignorejdkastub option makes the checker not load the jdk.astub
file. Files from the "stubs" option are still loaded.
Regex Checker:
Support concatenation of PolyRegex strings.
Improve examples of use of RegexUtil methods.
Signature Checker:
Add new @ClassGetName annotation, for a 4th string representation of a
class that is used by the JDK. Add supporting annotations to make the
type hierarchy a complete lattice.
Add PolySignature annotation.
Internal bug fixes:
Improve method type argument inference.
Handle type variables whose upper bound is a type variable.
Fix bug in least upper bound computation for anonymous classes.
Improve handling of annotations inherited from superclasses.
Fix design problem with Nullness Checker and primitive types.
Ensure that overriding methods respect pre- and postconditions.
Correctly resolve references to an enclosing this.
Improve handling of Java source that contains compilation errors.
----------------------------------------------------------------------
Version 1.2.4, 15 Dec 2011
All checkers:
- @Target(TYPE_USE) meta-annotation is properly handled.
Nullness Checker:
- Do not allow nullness annotations on primitive types.
- Improvements to rawness (initialization) checks.
- Special-case known keys for System.getProperty.
- The -Alint=uninitialized command-line option now defaults to off, and
applies only to initialization of primitive and @Nullable fields. It is
not possible to disable, from the command line, the check that all
@NonNull fields are initialized. Such warnings must be suppressed
explicitly, for example by using @SuppressWarnings.
Regex Checker:
- Improved RegexUtil class.
Manual:
- Add FAQ item "Is the Checker Framework an official part of Java?"
- Trim down README.txt; users should read the manual instead.
- Improvements throughout, especially to Nullness and Regex Checker sections.
Implementation details:
- Add a new @InvisibleQualifier meta-annotation for type qualifiers.
Instead of special-casing @Unqualified in the AnnotatedTypeMirror it
now looks for this meta-annotation. This also allows type systems to
hide type qualifiers it doesn't want visible, which we now use in the
Nullness Checker to hide the @Primitive annotation.
- Nullness Checker: Introduce a new internal qualifier @Primitive that is
used for primitive types.
- Be stricter about qualifiers being present on all types. If you get
errors about missing qualifiers, check your defaulting rules.
This helped in fixing small bugs in corner cases of the type
hierarchy and type factory.
- Unify decoding type annotations from trees and elements.
- Improve handling of annotations on type variables and upper bounds.
- Support checkers that use multiple, disjoint qualifier hierarchies.
- Many bug fixes.
----------------------------------------------------------------------
Version 1.2.3, 1 Nov 2011
Regex Checker:
- Add @PolyRegex polymorphic annotation
- Add more stub library annotations
Implementation details:
- Do not use "null" for unqualified types. Explicitly use @Unqualified
and be strict about correct usage. If this causes trouble for you,
check your @ImplicitFor and @DefaultQualifierInHierarchy
meta-annotations and ensure correct defaulting in your
AnnotatedTypeFactory.
Bug fixes:
- Correctly handle f-bounded polymorphism. AnnotatedTypeMirror now has
methods to query the "effective" annotations on a type, which
handles type variable and wildcard bounds correctly. Also, terminate
recursions by not doing lazy-initialization of bounds during defaulting.
- Many other small bug fixes and documentation updates.
----------------------------------------------------------------------
Version 1.2.2, 1 Oct 2011
Be less restrictive about when to start type processing when errors
already exist.
Add -AskipDefs command-line option to not type-check some class
definitions.
Documentation improvements.
----------------------------------------------------------------------
Version 1.2.1, 20 Sep 2011
Fix issues 109, 110, 111 and various other cleanups.
Improvements to the release process.
Documentation improvements.
----------------------------------------------------------------------
Version 1.2.0.1, 4 Sep 2011
New version number to stay in sync with JSR 308 compiler bugfix.
No significant changes.
----------------------------------------------------------------------
Version 1.2.0, 2 Sep 2011
Updated to JDK 8. Use -source 8 (the new default) for type annotations.
Documentation improvements
Bug fixes all over
Nullness Checker:
- Correct the upper bounds of all Collection subtypes
----------------------------------------------------------------------
Version 1.1.5, 22 Jul 2011
Units Checker:
Instead of conversion routines, provide unit constants, with which
to multiply unqualified values. This is easier to type and the
multiplication gets optimized away by the compiler.
Fenum Checker:
Ensure that the switch statement expression is a supertype of all
the case expressions.
Implementation details:
- Parse declaration annotations in stub files
- Output error messages instead of raising exceptions. This change
required us to introduce method "initChecker" in class
SourceChecker, which should be used instead of "init". This allows
us to handle the calls to initChecker within the framework.
Use method "errorAbort" to output an error message and abort
processing.
----------------------------------------------------------------------
Version 1.1.4, 8 Jul 2011
Units Checker (new):
Ensures operations are performed on variables of correct units of
measurement (e.g., miles vs. kilometers vs. kilograms).
Changed -AskipClasses command-line option to -AskipUses
Implementation details:
- Improve support for type qualifiers with enum attributes
----------------------------------------------------------------------
Version 1.1.3, 17 Jun 2011
Interning:
- Add @UsesObjectEquals annotation
Manual:
- Signature Checker is now documented
- Fenum Checker documentation improved
- Small improvements to other sections
Implementation details:
- Updates to the web-site build process
- The BaseTypeVisitor used to provide the same two type parameters as
class SourceVisitor. However, all subtypes of BaseTypeVisitor were
instantiated as <Void, Void>. We decided to directly instantiate the
SourceVisitor as <Void, Void> and removed this complexity.
Instead, the BaseTypeVisitor is now parameterized by the subtype of
BaseTypeChecker that should be used. This gives a more concrete type
to field "checker" and is similar to BasicAnnotatedTypeFactory.
- Added method AnnotatedTypeFactory.typeVariablesFromUse to allow
type-checkers to adapt the upper bounds of a type variable depending on
the type instantiation.
- Method type argument inference:
Changed AnnotatedTypeFactory.methodFromUse to return a Pair consisting
of the method and the inferred or explicit method type arguments.
If you override this method, you will need to update your version.
See this change set for a simple example:
https://github.com/typetools/checker-framework/source/detail?r=8381a213a4
- Testing framework:
Support for multiple expected errors using the "// :: A :: B :: C" syntax.
Many small updates and fixes.
----------------------------------------------------------------------
Version 1.1.2, 12 Jan 2011
Fake Enum Checker (new):
A "fake enumeration" is a set of integers rather than a proper Java enum.
They are used in legacy code and for efficiency (e.g., in Android). The
Fake Enum Checker gives them the same safety guarantees as a proper Java
enum.
Property File Checker (new):
Ensures that valid keys are used for property files and resource bundles.
Also includes a checker that code is properly internationalized and a
checker for compiler message keys as used in the Checker Framework.
Signature Checker (new):
Ensures that different string representations of a Java type (e.g.,
"package.Outer.Inner" vs. "package.Outer$Inner" vs. "Lpackage/Outer$Inner;")
are not misused.
Interning Checker enhancements:
Issues fewer false positives for code like "a==b || a.equals(b)"
Foreign annotations:
The Checker Framework supports more non-Checker-Framework annotations.
This means that it can check already-annotated code without requiring you
to rewrite your annotations.
Add as an alias for checkers.interning.quals.Interned:
com.sun.istack.Interned
Add as aliases for checkers.nullness.quals.NonNull:
com.sun.istack.NotNull
org.netbeans.api.annotations.common.NonNull
Add as aliases for checkers.nullness.quals.Nullable:
com.sun.istack.Nullable
javax.validation.constraints.NotNull
org.netbeans.api.annotations.common.CheckForNull
org.netbeans.api.annotations.common.NullAllowed
org.netbeans.api.annotations.common.NullUnknown
Manual improvements:
Improve installation instructions
Rewrite section on generics (thanks to Bert Fernandez and David Cok)
Also refactor the generics section into its own chapter
Rewrite section on @Unused and @Dependent
New manual section: Writing Java expressions as annotation arguments
Better explanation of warning suppression
JSR 308 is planned for Java 8, not Java 7
Stub files:
Support nested classes by expressing them at top level in binary form: A$B
Improved error reporting when parsing stub files
Annotated JDK:
New way of generating annotated JDK
jdk.jar file no longer appears in repository
Warning if you are not using the annotated JDK.
Miscellaneous:
Warn if -source command-line argument does not support type annotations
Many bug fixes
There are too many to list, but some notable ones are to local type
inference, generics, pre- and post-conditions (e.g., @NonNullOnEntry,
@AssertNonNull*), and map keys (@KeyFor). In particular, preconditions
and map key annotations are now checked, and if they cannot be verified,
an error is raised; previously, they were not verified, just unsoundly
trusted.
----------------------------------------------------------------------
Version 1.1.1, 18 Sep 2010
Eclipse support:
Removed the obsolete Eclipse plug-in from repository. The new one uses a
different repository
(http://code.google.com/a/eclipselabs.org/p/checker-plugin/) but a user
obtains it from the same URL as before:
https://checkerframework.org/eclipse/
Property Key Checker:
The property key checker allows multiple resource bundles and the
simultaneous use of both resource bundles and property files.
Javari Checker:
Added Javari stub classes for more JDK classes.
Distribution:
Changed directory structure (top level is "checker-framework"; "checkers"
is a under that) for consistency with version control repository.
Many documentation improvements and minor bugfixes.
----------------------------------------------------------------------
Version 1.1.0b, 16 Jun 2010
Fixed a bug related to running binary release in JDK 6
----------------------------------------------------------------------
Version 1.1.0, 13 Jun 2010
Checkers
Introduced a new simple mechanism for running a checker
Added one annotated JDK for all checkers
Nullness Checker
Fixed bugs related to map.get() and KeyFor annotation
Fixed bugs related to AssertNonNull* and parameters
Minor updates to the annotated JDK, especially to java.io.File
Manual
Updated installation instructions
Clarified section regarding fields and type inference
----------------------------------------------------------------------
Version 1.0.9, 25 May 2010
Nullness Checker:
Improved Javadocs and manual documentation
Added two new annotations: AssertNonNullAfter, KeyFor
Fixed a bug related to AssertNonNullIfFalse and assert statements
Renamed NonNullVariable to NonNullOnEntry
Checkers:
Interning: Skipping equality check, if either operands should be skipped
Fixed a bug related to annotations targeting array fields found in classfile
Fixed a bug related to method invocation generic type inference
in static methods
Manual
Added a section on nullness method annotations
Revised the Nullness Checker section
Updated Ant usage instructions
----------------------------------------------------------------------
Version 1.0.8, 15 May 2010
Checkers
Changed behavior of flow type refinement when annotation is explicit
Handle array initializer trees (without explicit type)
Handle the case of Vector.copyInto
Include javax classes in the distributed jdk jar files
Interning Checker
Handle interning inference of string concatenation
Add 20+ @Interned annotations to the JDK
Add an option, checkclass, to validate the interning
of specific classes only
Bug fixes
Fix a bug related to array implicit types
Lock Checker: Treat null as a bottom type
Manual
Added a new section about Flow inference and fields
----------------------------------------------------------------------
Version 1.0.7, 12 Apr 2010
Checkers
Distributed a Maven repository
Updated stub parser project to latest version (javaparser 1.0.8)
Fixed bugs related to iterable wildcards and type parameter types
----------------------------------------------------------------------
Version 1.0.6, 24 Feb 2009
Nullness Checker
Added support for new annotations:
Pure - indicates that the method, given the same parameters, return the
same values
AssertNonNullIfFalse - indicates that a field is NonNull if the method
returns false
Renamed AssertNonNull to AssertParametersNonNull
Updated the annotated jdk
Javari Checker
Fixed many bugs:
handle implicit dereferencing of this (e.g. `field` in place of
`this.field`)
apply default annotations to method parameters
----------------------------------------------------------------------
Version 1.0.5, 12 Jan 2009
Checkers
Added support for annotated jdk jars
Improved readability of some failure messages
Added AssertNonNullIfTrue support for method parameter references
Fixed a bug related to LazyNonNull and array fields
Fixed a bug related to inference and compound assignments (e.g. +=)
nullness: permit the type of @NonNull Void
Manual
Updated annotating-libraries chapter regarding annotated jdk
----------------------------------------------------------------------
Version 1.0.4, 19 Dec 2009
Bug Fixes
wildcards not recognized as subtypes of type variables
e.g. '? extends A' and 'A'
PolyNull methods not accepting null literal value arguments
spurious unexpected Raw warnings
Manual
Clarified FAQ item regarding why List's type parameter is
"extends @NonNull Object"
----------------------------------------------------------------------
Version 1.0.3, 5 Dec 2009
Checkers
New location UPPER_BOUND for DefaultQualifier permits setting the default
for upper bounds, such as Object in "? extends Object".
@DefaultQualifier accepts simple names, like @DefaultQualifier("Nullable"),
rather than requiring @DefaultQualifier("checkers.nullness.quals.Nullable").
Local variable type inference has improved support for array accesses.
The repository contains Eclipse project and launch configuration files.
This is helpful too people who want to build a checker, not to people
who merely want to run a checker.
Many bug fixes, including:
handling wildcard subtyping rules
stub files and vararg methods being ignored
nullness and spurious rawness errors
uses of array clone method (e.g. String[].clone())
multibound type parameters (e.g. <T extends @A Number & @B Cloneable>)
Manual
Documented the behavior of annotations on type parameter declarations.
New FAQ item:
How to collect warnings from multiple files
Why a qualifier shouldn't apply to both types and declarations
----------------------------------------------------------------------
Version 1.0.2, 16 Nov 2009
Checkers
Renamed Regex Checker's @ValidRegex annotation to @Regex
Improved Collection.toArray() heuristics to be more sound
Bug fixes
Fixed the annotated JDK to match OpenJDK 6
- Added missing methods and corrected class hierarchy
Fixed a crash related to intersection types
----------------------------------------------------------------------
Version 1.0.1, 1 Nov 2009
Checkers
Added new checkers:
RegEx checker to detect invalid regular expression use
Internationalization (I18n) checker to detect internationalization errors
Functionality
Added more performance optimizations
nullness: Added support for netbeans nullness annotations
nullness: better semantics for redundant nullness tests
related to redundant tests in assertions
lock: Added support for JCIP annotation in the Lock Checker
tainting: Added support for polymorphism
Lock Checker supports the JCIP GuardedBy annotation
Bug fixes
Fixed a crashing bug related to interaction between
generic types and wildcards
Fixed a bug in stub file parser related to vararg annotations
Fixed few bugs in skeleton file generators
Manual
Tweak installation instructions
Reference Units Checker
Added new sections for new checkers
RegEx checker (S 10)
Internationalization Checker (S 11)
----------------------------------------------------------------------
Version 1.0.0, 30 Sep 2009
Functionality
Added Linear Checker to restrict aliasing
Bug fixes
Fixed flow erros related to loop controls and break/continue
Manual
Adopt new term, "Declaration Annotation" instead of non-type annotations
Added new sections:
Linear Checker (S 9)
Inexpressible types (S 14.3)
How to get started annotating legacy code (S 2.4.4)
Expanded Tainting Checker section
----------------------------------------------------------------------
Version 0.9.9, 4 Sep 2009
Functionality
Added more optional lint checks (cast:unsafe, all)
Nullness Checker supports @SuppressWarnings("nullness:generic.argument"),
for suppressing warnings related to misuse of generic type arguments.
This was already supported and documented, but had not been mentioned
in the changelog.
Bug fixes
Fixed many bugs related to Stub files causing parser to ignore
bodiless constructors
annotated arrays annotations
type parameter and wildcard bounds annotations
Manual
Rewrote 'javac implementation survival guide' (S 13.9)
Restructured 'Using a checker' (S 2)
Added 'Integration with external tools' (S 14)
Added new questions to the FAQ (S 15)
----------------------------------------------------------------------
Version 0.9.8, 21 Aug 2009
Functionality
Added a Tainting Checker
Added support for conditional nonnull checking
Added optional check for redundant nullness tests
Updated stub parser to latest libraries
Bug fixes
Fixed a bug related to int[] treated as Object when passed to vararg T...
Fixed a crash related to intersection types
Fixed a bug related to -AskipClasses not being honored
Fixed a bug related to flow
Manual
Added new sections
8 Tainting Checker
3.2.3 Conditional nullness
----------------------------------------------------------------------
Version 0.9.7, 12 Aug 2009
Functionality
Changed swNonNull to castNonNull
nullness: Improved flow to infer nullness based on method invocations
locking: Permitted @Holding to appear on constructors
Bug fixes
Fixed a bug related to typevar and wildcard extends clauses
----------------------------------------------------------------------
Version 0.9.6, 29 Jul 2009
Functionality
Changed 'jsr308.skipClasses' property with '-AskipClasses' option
Locking checker
- Add subtype checking for Holding
- Treat constructors as synchronized methods
Bug fixes
Added some missing nullness annotations in the jdk
Fixed some bugs related to reading stub files
Manual
Added a new section
2.10 Tips about writing annotations
Updated sections of
2.6 Unused fields and dependent types
3.1.1 Rawness annotation hierarchy
----------------------------------------------------------------------
Version 0.9.5, 13 Jul 2009
Functionality
Added support for Findbugs, JSR305, and IntelliJ nullness annotations
Added an Aggregate Checker base-class
Added support for a form of field access control
Bug fixes
Added check for arguments in super() calls in constructors
Manual
Added new sections:
Fields access control
Other tools for nullness checking
Bundling multiple checkers
----------------------------------------------------------------------
Version 0.9.4, 30 Jun 2009
Functionality
Added Lock Checker
Bug fixes
Handle more patterns for determining Map.get() return type
Manual Documentations
Improved installation instructions
Added the following sections
2.6 Dependent types
3.1 subsection for LazyNonNull
10.9 When to use (and not to use) type qualifiers
----------------------------------------------------------------------
Version 0.9.3, 23 Jun 2009
Functionality
Added support DefaultQualifier on packages
Added support for Dependent qualifier types
see checkers.quals.Dependent
Added an option to treat checker errors as warnings
Improved flow handling of boolean logic
Manual Documentations
Improved installation instructions
Improved discussion of effective and implicit qualifiers and defaults
Added a discussion about the need for bottom qualifiers
Added sections for how-to
. suppress Basic Checker warnings
. troubleshoot skeleton files
----------------------------------------------------------------------
Version 0.9.2, 2 Jun 2009
Functionality
Added pre-liminary support for lazy initialization in nullness
see LazyNonNull
Bug fixes
Corrected method declarations in JDK skeleton files
- bug resulted in a runtime error
Documentations
Updated qualifier javadoc documentations
Corrected a reference on passing qualifiers to javac
----------------------------------------------------------------------
Version 0.9.1, 19 May 2009
Bug fixes
Eliminated unexpected compiler errors when using checkers
Fixed bug related to reading annotations in skeleton files
API Changes
Renamed SourceChecker.process() to .typeProcess()
Manual
Updated troubleshooting info
info for annotations in skeleton files
----------------------------------------------------------------------
Version 0.9b, 22 Apr 2009
No visible changes
----------------------------------------------------------------------
Version 0.9, 16 Apr 2009
Framework
More space and performance optimizations
Handle raw type with multiple type var level
e.g. class Pair<X, Y extends X> { ... }
Manual
Improve installation instructions
Update references to command line arguments
----------------------------------------------------------------------
Version 0.8.9, 28 Mar 2009
Framework
Introduce Space (and minor performance) optimizations
Type-check constructor invocation receiver type
Fixed bug related to try-catch flow sensitivity analysis
Fixed bugs when type-checking annotations and enums
- bug results in null-pointer exception
----------------------------------------------------------------------
Version 0.8.8, 13 Mar 2009
Nullness Checker
Support for custom nullness assertion via @AssertNonNull
Support for meta-annotation AssertNonNull
Support for Collection.toArray() method
Infer the nullness of the returned type
Corrected some JDK Collection API annotations
Framework
Fixed bugs related to assignments expressions in Flow
Fixed bugs related to enum and annotation type hierarchy
Fixed bugs related to default annotations on wildcard bounds
----------------------------------------------------------------------
Version 0.8.7, 27 Feb 2009
Framework
Support annotations on type parameters
Fixed bugs related to polymorphic types/annotations
Fixed bugs related to stub fixes
Manual
Specify annotation defaults settings for IGJ
Update Known Problems section
----------------------------------------------------------------------
Version 0.8.6, 3 Feb 2009
Framework
Fixed bugs related to flow sensitivity analysis related to
. for loop and do while loops
. multiple iterations of a loop
. complement of logical conditions
Declarative syntax for string literal type introduction rules
Support for specifying stub file directories
----------------------------------------------------------------------
Version 0.8.5, 17 Jan 2009
Framework
Fixed bugs related to flow sensitivity analysis
Fixed bugs related to annotations on type parameters
----------------------------------------------------------------------
Version 0.8.4, 17 Dec 2008
Distribution
Included checkers-quals.jar which contains the qualifiers only
Framework
Fixed bugs related to inner classes
Fixed a bug related to resolving polymorphic qualifiers
within static methods
Manual
Added 'Distributing your annotated project'
----------------------------------------------------------------------
Version 0.8.3, 7 Dec 2008
Framework
Fixed bugs related to inner classes
Changed cast semantics
Unqualified casts don't change cast away (or in) any qualifiers
Refactored AnnotationBuilder to ease building annotations
Added support for Object += String new behavior
Added a type validation check for method return types
Nullness
Added inference of field initialization
Suppress false warnings due to method invocations within constructors
IGJ
Added proper support for AssignsFields and inner classes interactions
Manual
Updated 'Known Problems' section
----------------------------------------------------------------------
Version 0.8.2, 14 Nov 2008
Framework
Included a binary distribution in the releases
Added support for annotations on type parameters
Fixed bugs related to casts
Nullness
Improved error messages readability
Added partial support for Map.get() detection
Manual
Improved installation instructions
----------------------------------------------------------------------
Version 0.8.1, 1 Nov 2008
Framework
Added support for array initializers
Fixed many bugs related to generics and generic type inference
Documentations
Added 'Getting Started' guide
----------------------------------------------------------------------
Version 0.8, 27 Sep 2008
Framework
Added support for newly specified array syntax
Refactored code for annotating supertypes
Fixed AnnotationBuilder AnnotationMirror string representation
Fixed AnnotatedTypeMirror hashCode
Manual
Reorganized 'Annotating Libraries' section
----------------------------------------------------------------------
Version 0.7.9, 19 Sep 2008
Framework
Added support for stub files/classes
Fixed bugs related to anonymous classes
Fixed bugs related to qualifier polymorphism
Manual
Updated 'Annotating Libraries' section to describe stub files
Tests
Added support for Windows
Fixed a bug causing IGJ tests to fail on Windows
----------------------------------------------------------------------
Version 0.7.8, 12 Sep 2008
Framework
Improved support for anonymous classes
Included refactorings to ease extensibility
Fixed some minor bugs
Nullness
Fix some errors in annotated JDK
----------------------------------------------------------------------
Version 0.7.7, 29 Aug 2008
Framework
Fixed bugs related to polymorphic qualifiers
Fixed bugs related to elements array convention
Add implicit type arguments to raw types
Interning
Suppress cast warnings for interned classes
Manual
Removed discussion of non-standard array syntax alternatives
----------------------------------------------------------------------
Version 0.7.6, 12 Aug 2008
Framework
Changed default array syntax to ARRAYS-PRE, per the JSR 308 specification
Added an optional check for qualifier unsafe casts
Added support for running multiple checkers at once
Fixed bugs related array syntax
Fixed bugs related to accessing outer classes with-in inner classes
Manual
Added a new subsection about Checker Auto-Discovery
2.2.1 Checker Auto-discovery
----------------------------------------------------------------------
Version 0.7.5, 2 Aug 2008
Framework
Added support for ARRAYS-PRE and ELTS-PRE array syntax
Added a check for unsafe casts
Some improvements to the AnnotationBuilder API
Nullness Checker
Added a check for synchronized objects
Added a check for (un)boxing conversions
Javari Checker
Fixed some JDK annotated classes
----------------------------------------------------------------------
Version 0.7.4, 11 July 2008
Framework
Added support for annotations found in classfiles
Added support for the ARRAY-IN array syntax
Added AnnotationBuilder, to create AnotationMirrors with values
Improved the readability of recursive types string representation
Nullness Checker
Added a check for thrown Throwable nullability
IGJ Checker
Treat enums as mutable by default, like regular classes
Manual
Added a new subsection about array syntax proposals:
2.1.2 Annotating Arrays
----------------------------------------------------------------------
Version 0.7.3, 4 July 2008
Javari Checker
Converted JDK files into stubs
Nullness Checker
Fixed java.lang.Number declaration in the annotated jdk
Framework
Fixed a bug causing crashes related to primitive type boxing
Renamed DAGQualifierHierarchy to GraphQualifierHierarchy
----------------------------------------------------------------------
Version 0.7.2, 26 June 2008
IGJ Checker
Supports flow-sensitive type refinement
Framework
Renamed Default annotation to DefaultQualifier
Added DefaultQualifiers annotation
Fixed bugs related to flow-sensitive type refinement
Fixed an error in the build script in Windows
Manual
Added a new section
9.2 javac implementation survival guide
Added hyperlinks to Javadocs of the referenced classes
----------------------------------------------------------------------
Version 0.7.1, 20 June 2008
Nullness Checker
Made NNEL the default qualifier scheme
Basic Checker
Moved to its own checkers.basic package
Framework
Enhanced type-checking within qualifier-polymorphic method bodies
Fixed a bug causing StackOverflowError when type-checking wildcards
Fixed a bug causing a NullPointerException when type-checking
compound assignments, in the form of +=
Class Skeleton Generator
Distributed in compiled form (no more special installation instructions)
Added required asmx.jar library to lib/
Manual
Added new sections
2.2.1 Ant tasks
2.2.2 Eclipse plugin
2.6 The effective qualifier on a type
Rewrote section 8 on annotating libraries
Added reference to the new Eclipse plug-in
Deleted installation instructions
Javari Checker
Fixed bugs causing a NullPointerException when type-checking
primitive arrays
IGJ Checker
Fixed bugs related to uses of raw types
API Changes
Moved AnnotationFactory functionality to AnnotationUtils
Removed .root and .inConflict from DAGQualifierHierarchy
----------------------------------------------------------------------
Version 0.7, 14 June 2008
Installation
New, very simple installation instructions for Linux. For other
operating systems, you should continue to use the old instructions.
Nullness Checker
Renamed from "NonNull Checker" to "Nullness Checker".
Renamed package from checkers.nonnull to checkers.nullness.
The annotation names remain the same.
Added PolyNull, a polymorphic type qualifier for nullness.
Interning Checker
Renamed from "Interned Checker" to "Interning Checker".
Renamed package from checkers.interned to checkers.interning.
The annotation names remain the same.
Added PolyInterned, a polymorphic type qualifier for Interning.
Added support for @Default annotation.
Framework
Qualifiers
@PolymorphicQualifier was not previously documented in the manual.
Moved meta-qualifiers from checkers.metaquals package to checkers.quals.
Removed @VariableQualifier and @RootQualifier meta-qualifiers.
Added BasicAnnotatedTypeFactory, a factory that handles implicitFor,
defaults, flow-sensitive type inference.
Deprecated GraphQualifierHierarchy; DAGQualifierHierarchy replaces it.
Renamed methods in QualifierHierarchy.
Manual
Rewrote several manual sections, most notably:
2.1.1 Writing annotations in comments for backward compatibility
(note new -Xspacesincomments argument to javac)
2.3 Checking partially-annotated programs: handling unannotated code
2.6 Default qualifier for unannotated types
2.7 Implicitly refined types (flow-sensitive type qualifier inference)
8 Annotating libraries
9 How to create a new checker plugin
Javadoc for the Checker Framework is included in its distribution and is
available online at https://checkerframework.org/api/ .
----------------------------------------------------------------------
Version 0.6.4, 9 June 2008
All Framework
Updated the distributed JDK and examples to the new location of qualifiers
Javari Checker
Improved documentation on polymorphism resolution
Removed redundant code now added to the framework from JavariVisitor,
JavariChecker and JavariAnnotatedTypeFactory
Refactored method polymorphism into JavariAnnotatedTypeFactory
Fixed bug on obtaining type from NewClassTree, annotations at constructor
invocation are not ignored now
Refactored polymorphism resolution, now all annotations on parameters and
receivers are replaced, not only on the return type
Refactored and renamed internal annotator classes in
JavariAnnotatedTypeFactory
Added more constructor tests
Moved Javari annotations to checkers.javari.quals package
----------------------------------------------------------------------
Version 0.6.3, 6 June 2008
Checker Framework
Improved documentation and manual
Treat qualifiers on extends clauses of type variables and wildcard types as
if present on type variable itself
Renamed AnnotationRelations to QualifierHierarchy
Renamed GraphAnnotationRelations to GraphQualifierHierarchy
Renamed TypeRelations to TypeHierarchy
Added flow as a supported lint option for all checkers
Determined the suppress warning key reflectively
Interned Checker
Moved @Interned annotation to checkers.interned.quals package
NonNull Checker
Moved nonnull annotations to checkers.nonnull.quals package
Miscellaneous
Included Javadocs in the release
Improved documentation for all checkers
----------------------------------------------------------------------
Version 0.6.2, 30 May 2008
Checker Framework API
Added support for @Default annotation via TreeAnnotator
Added support for PolymorphicQualifier meta-annotation
Disallow the use of @SupportedAnnotationTypes on checkers
Fixed bugs related to wildcards with super clauses
Improved flow-sensitive analysis for fields
Javari Checker
Moved Javari qualifiers from checkers.quals to checkers.javari.quals
Fixed bugs causing null pointer exceptions
NonNull Checker
Fixed bugs related to nonnull flow
Added new tests to test suite
Basic Checker
Renamed Custom Checker to Basic Checker
----------------------------------------------------------------------
Version 0.6.1, 26 Apr 2008
Checker Framework API
Added support for @ImplicitFor meta-annotations via the new TypeAnnotator
and TreeAnnotator classes
Improved documentation and specifications
Fixed a bug related to getting supertypes of wildcards
Fixed a crash on class literals of primitive and array types
Framework ignores annotations that are not part of a type system
Fixed several minor bugs in the flow-sensitive inference implementation.
IGJ Checker
Updated the checker to use AnnotationRelations and TypeRelations
Javari Checker
Changing RoMaybe annotation to PolyRead
Updated checker to use AnnotationRelations and TypeRelations
Updated the JDK
Fixed bugs related to QReadOnly and type argument subtyping
Fixed bugs related to this-mutable fields in methods with @ReadOnly receiver
Fixed bugs related to primitive type casts
Added new tests to test suit
NonNull Checker
Updated the annotated JDK
Fixed bugs in which default annotations were not correctly applied
Added @Raw types to handle partial object initialization.
Fixed several minor bugs in the checker implementation.
Custom Checker
Updated checker to use hierarchy meta-annotations, via -Aquals argument
----------------------------------------------------------------------
Version 0.6, 11 Apr 2008
Checker Framework API
Introduced AnnotationRelations and TypeRelations, more robust classes to
represent type and annotation hierarchies, and deprecated
SimpleSubtypeRelation
Add support for meta-annotations to declare type qualifiers subtype relations
Re-factored AnnotatedTypes and AnnotatedTypeFactory
Added a default implementation of SourceChecker.getSuppressWarningsKey()
that reads the @SuppressWarningsKey class annotation
Improved support for multidimensional arrays and new array expressions
Fixed a bug in which implicit annotations were not being applied to
parenthesized expressions
Framework ignores annotations on a type that do not have @TypeQualifier
Moved error/warning messages into "messages.properties" files in each
checker package
Fixed a bug in which annotations were inferred to liberally by
checkers.flow.Flow
Interned Checker
Added heuristics that suppress warnings for certain comparisons (namely in
methods that override Comparator.compareTo and Object.equals)
The Interned checker uses flow-sensitive inference by default
IGJ Checker
Fixed bugs related to resolving immutability variable in method invocation
Fixed a bug related to reassignability of fields
Add more tests
Javari Checker
Added placeholder annotation for ThisMutable mutability
Re-factored JavariAnnotatedTypeFactory
Fixed self-type resolution for method receivers for readonly classes
Fixed annotations on parameters of readonly methods
Fixed type validation for arrays of primitives
Added more tests
Renamed @RoMaybe annotation to @PolyRead
NonNull Checker
Removed deprecated checkers.nonnull.flow package
Fixed a bug in which default annotations were not applied correctly
Miscellaneous
Improved Javadocs
Added FactoryTestChecker, a more modular tester for the annotated type
factory
Simplify error output for some types by stripping package names
----------------------------------------------------------------------
Version 0.5.1, 21 Mar 2008
Checker Framework API
Added support for conditional expression
Added checks for type validity and assignability
Added support for per-checker customization of asMemberOf
Added support for type parameters in method invocation,
including type inference
Enhanced performance of AnnotatedTypeFactory
Checkers run only when no errors are found by Javac
Fixed bugs related AnnotationUtils.deepCopy()
Fixed support for annotated class type parameters
Fixed some support for annotated type variable bounds
Added enhancements to flow-sensitive qualifier inference
Added checks for type parameter bounds
Interned Checker
Fixed some failing test cases
Fixed a bug related to autoboxing/unboxing
Added experimental flow-sensitive qualifier inference (use
"-Alint=flow" to enable)
Improved subtype testing, removing some spurious errors
IGJ Checker
Deleted IGJVisitor!
Fixed some bugs related to immutability type variable resolution
Javari Checker
Removed redundant methods from JavariVisitor in the new framework
Added support to constructor receivers
Added support to parenthesized expressions
Fixed a bug related to resolving RoMaybe constructors
Fixed a bug related to parsing conditional expressions
Added parsing of parenthesized expressions
Replaced checkers.javari.VisitorState with
checkers.types.VisitorState, present in BaseTypeVisitor
Modified JavariVisitor type parameters (it now extends
BaseTypeVisitor<Void, Void>, not BaseTypeVisitor<Void,
checkers.javari.VisitorState>)
Modified JavariAnnotatedTypeFactory TreePreAnnotator to mutate a
AnnotatedTypeMirror parameter instead of returning a
List<AnnotationMirror>, in accordance with other parts of the
framework design
Modified test output format
Added tests to test suite
NonNull Checker
Fixed a bug related to errors produced on package declarations
Exception parameters are now treated as NonNull by default
Added better support for complex conditionals in NonNull-specific
flow-sensitive inference
Fixed some failing test cases
Improved subtype testing, removing some spurious errors
Custom Checker
Added a new type-checker for type systems with no special semantics, for
which annotations can be provided via the command line
Miscellaneous
Made corrections and added more links to Javadocs
A platform-independent binary version of the checkers and framework
(checkers.jar) is now included in this release
----------------------------------------------------------------------
Version 0.5, 7 Mar 2008
Checker Framework API
Enhanced the supertype finder to take annotations on extends and
implements clauses of a class type
Fixed a bug related to checking an empty array initializer ("{}")
Fixed a bug related to missing type information when multiple
top-level classes are defined in a single file
Fixed infinite recursion when checking expressions like "Enum<E
extends Enum<E>>"
Fixed a crash in checkers.flow.Flow related to multiple top-level
classes in a single file
Added better support for annotated wildcard type bounds
Added AnnotatedTypeFactory.annotateImplicit() methods to replace
overriding the getAnnotatedType() methods directly
Fixed a bug in which constructor arguments were not checked
Interned Checker
Fixed a bug related to auto-unboxing of classes for primitives
Added checks for calling methods with an @Interned receiver
IGJ Checker
Implemented the immutability inference for self-type (type of
'this') properly
Enhanced the implicit annotations to make an un-annotated code
type-check
Fixed bugs related to invoking methods based on a method's receiver
annotations
Javari Checker
Restored in this version, after porting to the new framework
NonNull Checker
Fixed a bug in which primitive types were considered possibly null
Improvements to support for @Default annotations
Miscellaneous
Improved error message display for all checkers
----------------------------------------------------------------------
Version 0.4.1, 22 Feb 2008
Checker Framework API
Introduced AnnotatedTypeFactory.directSupertypes() which finds the
supertypes as annotated types, which can be used by the framework.
Introduced default error messages analogous to javac's error messages.
Fixed bugs related to handling array access and enhanced-for-loop type
testing.
Fixed several bugs that are due AnnotationMirror not overriding .equals()
and .hashCode().
Improved Javadocs for various classes and methods.
Fixed several bugs that caused crashes in the checkers.
Fixed a bug where varargs annotations were not handled correctly.
IGJ Checker
Restored in this version, after porting the checker to the new framework.
NonNull Checker
Fixed a bug where static field accesses were not handled correctly.
Improved error messages for the NonNull checker.
Added the NNEL (NonNull Except Locals) annotation default.
Interned Checker
Fixed a bug where annotations on type parameter bounds were not handled
correctly.
Improved error messages for the Interned checker.
----------------------------------------------------------------------
Version 0.4, 11 Feb 2008
Checker Framework API
Added checkers.flow, an improved and generalized flow-sensitive type
qualifier inference, and removed redundant parts from
checkers.nonnull.flow.
Fixed a bug that prevented AnnotatedTypeMirror.removeAnnotation from working
correctly.
Fixed incorrect behavior in checkers.util.SimpleSubtypeRelation.
NonNull Checker
Adopted the new checkers.flow.Flow type qualifier inference.
Clarifications and improvements to Javadocs.
----------------------------------------------------------------------
Version 0.3.99, 20 Nov 2007
Checker Framework API
Deprecated AnnotatedClassType, AnnotatedMethodType, and AnnotationLocation
in favor of AnnotatedTypeMirror (a new representation of annotated types
based on the javax.lang.model.type hierarchy).
Added checkers.basetype, which provides simple assignment and
pseudo-assignment checking.
Deprecated checkers.subtype in favor of checkers.basetype.
Added options for debugging output from checkers: -Afilenames, -Ashowchecks
Interned Checker
Adopted the new Checker Framework API.
Fixed a bug in which "new" expressions had an incorrect type.
NonNull Checker
Adopted the new Checker Framework API.
Javari Checker
IGJ Checker
Removed in this version, to be restored in a future version pending
completion of updates to these checkers with respect to the new framework
API.
----------------------------------------------------------------------
Version 0.3, 1 Oct 2007
Miscellaneous Changes
Consolidated HTML documentation into a single user manual (see the "manual"
directory in the distribution).
IGJ Checker
New features:
Added a test suite.
Added annotations (skeleton files) for parts of java.util and java.lang.
NonNull Checker
New features:
@SuppressWarnings("nonnull") annotation suppresses checker warnings.
@Default annotation can make NonNull (not Nullable) the default.
Added annotations (skeleton classes) for parts of java.util and java.lang.
NonNull checker skips no classes by default (previously skipped JDK).
Improved error messages: checker reports expected and found types.
Bug fixes:
Fixed a null-pointer exception when checking certain array accesses.
Improved checking for field dereferences.
Interned Checker
New features:
@SuppressWarnings("interned") annotation suppresses checker warnings.
The checker warns when two @Interned objects are compared with .equals
Bug fixes:
The checker honors @Interned annotations on method receivers.
java.lang.Class types are treated as @Interned.
Checker Framework API
New features:
Added support for default annotations and warning suppression in checkers
----------------------------------------------------------------------
Version 0.2.3, 30 Aug 2007
IGJ Checker
New features:
changed @W(int) annotation to @I(String) to improve readability
improved readability of error messages
added a test for validity of types (testing @Mutable String)
Bug fixes:
fixed resolving of @I on fields on receiver type
fixed assignment checking assignment validity for enhanced for loop
added check for constructor invocation parameters
Interned Checker
added the Interned checker, for verifying the absence of equality testing
errors; see "interned-checker.html" for more information
Javari Checker
New features:
added skeleton classes for parts of java.util and java.lang with Javari
annotations
Bug fixes:
fixed readonly inner class bug on Javari Checker
NonNull Checker
New features:
flow-sensitive analysis for assignments from a known @NonNull type (e.g.,
when the right-hand of an assignment is @NonNull, the left-hand is
considered @NonNull from the assignment to the next possible
reassignment)
flow-sensitive analysis within conditional checks
Bug fixes:
fixed several sources of null-pointer errors in the NonNull checker
fixed a bug in the flow-sensitive analysis when a variable was used on
both sides of the "=" operator
Checker Framework API
New features:
added the TypesUtils.toString() method for pretty-printing annotated types
added AnnotationUtils, a utility class for working with annotations and
their values
added SourceChecker.getDefaultSkipPattern(), so that checkers can
individually specify which classes to skip by default
added preliminary support for suppressing checker warnings via
the @SuppressWarnings annotation
Bug fixes:
fixed handling of annotations of field values
InternalAnnotation now correctly uses defaults for annotation values
improved support for annotations on class type parameter bounds
fixed an assertion violation when compiling certain uses of arrays
----------------------------------------------------------------------
Version 0.2.2, 16 Aug 2007
Code Changes
* checkers.igj
some bug fixes and improved documentation
* checkers.javari
fixed standard return value to be @Mutable
fixed generic and array handling of @ReadOnly
fixed @RoMaybe resolution of receivers at method invocation
fixed parsing of parenthesized trees and conditional trees
added initial support for for-enhanced loop
fixed constructor behavior on @ReadOnly classes
added checks for annotations on primitive types inside arrays
* checkers.nonnull
flow sensitive analysis supports System.exit, new class/array creation
* checkers.subtype
fixes for method overriding and other generics-related bugs
* checkers.types
added AnnotatedTypeMirror, a new representation for annotated types that
might be moved to the compiler in later version
added AnnotatedTypeScanner and AnnotatedTypeVisitor, visitors for types
AnnotatedTypeFactory uses GenericsUtils for improved handing of annotated
generic types
* checkers.util
added AnnotatedTypes, a utility class for AnnotatedTypeMirror
added GenericsUtils, a utility class for working with generic types
* tests
modified output to print only missing and unexpected diagnostics
added new test cases for the Javari Checker
Documentation Changes
* checkers/igj-checker.html
improvements to page
* checkers/javari-checker.html
examples now point to test suit files
Miscellaneous Changes
* checkers/build.xml
Ant script fails if it doesn't find the correct JSR 308 javac version
----------------------------------------------------------------------
Version 0.2.1, 1 Aug 2007
Code Changes
* checkers.igj & checkers.igj.quals
added an initial implementation for the IGJ language
* checkers.javari
added a state parameter to the visitor methods
added tests and restructured the test suite
restructured and implemented RoMaybe
modified return type to be mutable by default
fixed mutability type handling for type casts and field access
fixed bug, ensuring no primitives can be ReadOnly
a method receiver type is now based on the correct annotation
fixed parameter type-checking for overriden methods
fixed bug on readonly field initialization
added handling for unary trees
* checkers.nonnull
added a tests for the flow-senstive analysis and varargs methods
improved flow-sensitive analysis: else statements, asserts,
return/throw statements, instanceof checks, complex conditionals with &&
fixed a bug in the flow-sensitive analysis that incorrectly inferred
@NonNull for some elements
removed NonnullAnnotatedClassType, moving its functionality into
NonnullAnnotatedTypeFactory
* checkers.source
SourceChecker.getSupportedAnnotationTypes() returns ["*"], overriding
AbstractProcessor.getSupportedAnnotationTypes(). This enables all
checkers to run on unannotated code
* checkers.subtypes
fixed a bug pertaining to method parameter checks for overriding methods
fixed a bug that caused crashes when checking varargs methods
* checkers.types
AnnotatedTypeFactory.getClass(Element) and getMethod(Element) use the
tree of the passed Element if one exists
AnnotatedClassType.includeAt, .execludeAt, .getAnnotationData were
added and are public
added constructor() and skipParens() methods to InternalUtils
renamed getTypeArgumentLocations() to getAnnotatedTypeArgumentLocations()
in AnnotatedClassType
added AnnotationData to represent annotations instead of Class instances;
primarily allows querying annotation arguments
added switch for whether or not to use includes/excludes in
AnnotatedClassType.hasAnnotationAt()
* checkers.util
added utility classes
added skeleton class generator utility for annotating external libraries
Documentation Changes
* checkers/nonnull-checker.html
added a note about JML
added a caveat about variable initialization
* checkers/README-checkers.html
improvements to instructions
----------------------------------------------------------------------
Version 0.2, 2 Jul 2007
Code Changes
* checkers.subtype
subtype checker warns for annotated and redundant typecasts
SubtypeVisitor checks for invalid return and parameter types in overriding
methods
added checks for compound assignments (like '+=')
* checkers.source
SourceChecker honors the "checkers.skipClasses" property as a regex for
suppressing warnings from unannotated code (property is "java.*" by
default)
SourceVisitor extends TreePathScanner<R,P> instead of
TreeScanner<Void,Void>
* checkers.types
AnnotatedClassType.isAnnotatedWith removed
AnnotatedClassType.getInnerLocations renamed to getTypeArgumentLocations
AnnotatedClassType.include now removes from the exclude list (and
vice-versa)
AnnotatedClassType.setElement and setTree methods are now public
* checkers.nonnull
added a flow-sensitive analysis for inferring @NonNull in "if (var !=
null)"-style checks
added checks for prefix and postfix increment and decrement operations
* checkers.javari
added initial implementation of a type-checker for the Javari language
----------------------------------------------------------------------
Version 0.1.1, 7 Jun 2007
Documentation Changes
* checkers/nonnull-checker.html
created "Tiny examples" subsection
created "Annotated library" subsection
noted where to read @NonNull-annotated source
moved instructions for unannotated code to README-checkers.html
various minor corrections and clarifications
* checkers/README-checkers.html
added cross-references to other Checker Framework documents
removed redundant text
moved instructions for unannotated code from nonnull-checker.html
various minor corrections and clarifications
* checkers/creating-a-checker.html
added note about getSupportedSourceVersion
removed line numbers from @Interned example
added section on SubtypeChecker/SubtypeVisitor
various minor corrections and clarifications
Code Changes
* checkers.subtype
removed deprecated getCheckedAnnotation() mechanism
added missing package Javadocs
package Javadocs reference relevant HTML documentation
various improvements to Javadocs
SubtypeVisitor and SubtypeChecker are now abstract classes
updated with respect to preferred usages of
AnnotatedClassType.hasAnnotationAt and AnnotatedClassType.annotateAt
* checkers.source
added missing package Javadocs
package Javadocs reference relevant HTML documentation
* checkers.types
added missing package Javadocs
package Javadocs reference relevant HTML documentation
AnnotatedClassType.annotateAt now correctly handles
AnnotationLocation.RAW argument
AnnotatedClassType.annotate deprecated in favor of
AnnotatedClassType.annotateAt with AnnotationLocation.RAW as an argument
AnnotatedClassType.isAnnotatedWith deprecated in favor of
AnnotatedClassType.hasAnnotationAt with AnnotationLocation.RAW as an
argument
Added fromArray and fromList methods to AnnotationLocation and made
corresponding constructors private.
* checkers.quals
added Javadocs and meta-annotations on annotation declarations where
missing
package Javadocs reference relevant HTML documentation
* checkers.nonnull
various improvements to Javadocs
package Javadocs reference relevant HTML documentation
Miscellaneous Changes
improved documentation of ch examples
Checker Framework build file now only attempts to compile .java files
----------------------------------------------------------------------
Version 0.1.0, 1 May 2007
Initial release.
|