{"id":443549,"date":"2024-12-27T03:00:41","date_gmt":"2024-12-27T03:00:41","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=443549"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=443549","title":{"rendered":"<span>10 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 Java \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0437\u0430 2024 \u0433\u043e\u0434<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 2024 \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043e \u0447\u0451\u043c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u0441\u0432\u043e\u0439 \u0431\u043b\u043e\u0433. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043d\u0430\u0441\u0442\u0430\u043b\u0430 \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u044f\u044f \u043f\u043e\u0440\u0430, \u0438 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u0412\u043e\u0442 \u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 Java \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u0441\u0442\u0440\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0432 Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/c13\/ed0\/61e\/c13ed061e9b234dfe9d7e544ea8eb6f4.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/c13\/ed0\/61e\/c13ed061e9b234dfe9d7e544ea8eb6f4.png\"\/><\/figure>\n<h3>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h3>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio, \u043c\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e, \u043d\u043e \u0442\u043e\u043f\u043e\u0432 \u0438\u043c\u0435\u043d\u043d\u043e Java \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u0431\u044b\u043b\u043e \u0430\u0436 \u0441 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/0788\/\">2020<\/a> \u0433\u043e\u0434\u0430. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0440\u0435\u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0434\u043e\u0441\u0442\u0430\u043b\u0438 \u043c\u044f\u0433\u043a\u0438\u0439 \u043f\u043b\u0435\u0434 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0435\u0431\u0435 \u0442\u0451\u043f\u043b\u044b\u0439 \u0447\u0430\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0434\u043b\u044f \u0432\u0430\u0441 10 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0442\u043e\u043f \u043f\u0440\u043e\u0441\u0442\u044b\u0435:<\/p>\n<ul>\n<li>\n<p>\u043c\u043e\u0451 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435, \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0438 \u043e\u0431\u0449\u0430\u044f \u043d\u0435\u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 10 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u0439, \u0438 \u043d\u0435 \u0431\u0435\u0437 \u043f\u043e\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0440\u043e\u043a\u043e\u0432 \u2014 \u041d\u043e\u0432\u044b\u0439 \u0413\u043e\u0434 \u0441\u043a\u043e\u0440\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \ud83d\ude42<\/p>\n<h3>10 \u043c\u0435\u0441\u0442\u043e. \u041d\u0430\u0437\u0430\u0434 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0435<\/h3>\n<p>\u041d\u0430 \u0434\u0435\u0441\u044f\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043d\u0430\u0441 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430.<\/p>\n<pre><code class=\"java\">public Builder setPersonalisation(Date date, ....) {   ....   final OutputStreamWriter     out = new OutputStreamWriter(bout, \"UTF-8\");   final DateFormat     format = new SimpleDateFormat(\"YYYYMMdd\");   out.write(format.format(date));     .... } <\/code><\/pre>\n<p>\u0418 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043c\u043e\u0433 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u0440\u0435\u0434\u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u044e\u044e \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443, \u0432\u0435\u0434\u044c \u0431\u0430\u0433 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438\u0441\u044c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0433\u043e\u0434 \ud83d\ude42 \u0423\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u0441 \u0447\u0435\u043c \u043e\u043d \u0441\u0432\u044f\u0437\u0430\u043d?<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 <code>SimpleDateFormat<\/code>. \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d \u0432\u0430\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c? \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u0443\u044e \u0434\u0430\u0442\u0443, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u0430\u0442\u0443 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 (10.12.2024), \u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u2014 <code>20241210<\/code>.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 29.12.2024, \u0442\u043e \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0443\u0436\u0435 <code>20251229<\/code>. \u0422\u0430\u043a\u0438\u043c \u043d\u0435\u0445\u0438\u0442\u0440\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0432 \u043d\u043e\u0432\u044b\u0439 \u0433\u043e\u0434 \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0437\u0430\u0434, \u043a\u0441\u0442\u0430\u0442\u0438, \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0438\u043c\u0432\u043e\u043b <code>Y<\/code> \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0435 \u0434\u043b\u044f <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/text\/SimpleDateFormat.html\">SimpleDateFormat<\/a> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0433\u043e\u0434, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043d\u043e\u043c\u0435\u0440\u0435 \u043d\u0435\u0434\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e \u043d\u0435\u0434\u0435\u043b\u044f \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043d\u0435\u0451 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0447\u0435\u0442\u044b\u0440\u0435 \u0434\u043d\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0433\u043e\u0434\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u043d\u0435\u0434\u0435\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435, \u0442\u043e \u0432 \u043d\u043e\u0432\u044b\u0439 \u0433\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0430\u0436 \u043d\u0430 \u0442\u0440\u0438 \u0434\u043d\u044f \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>Y<\/code> \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0439 \u2014 <code>y<\/code>. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u0442\u043e \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1185\/\">\u0437\u0430\u043c\u0435\u0442\u043a\u0430<\/a>.<\/p>\n<p>\u0412\u043e\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043b\u043e \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6122\/\">V6122<\/a> Usage of &#8216;Y&#8217; (week year) pattern was detected: it was probably intended to use &#8216;y&#8217; (year). SkeinParameters.java 246<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043d\u0435\u0434\u0435\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0430\u0433 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043c\u0435\u0441\u0442\u0435? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0435 \u0432 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/github.com\/bcgit\/bc-java\">Bouncy Castle<\/a>, \u0430 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435. \u0422\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0442 \u0431\u0430\u0433 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e <a href=\"https:\/\/github.com\/bcgit\/bc-java\/commit\/942fe041f2a5ef44e16eea48338a9244cdd1af93\">\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d<\/a>. \u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u0435\u0442 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u2014 \u0441\u043d\u043e\u0432\u0430 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \ud83d\ude42<\/p>\n<h3>9 \u043c\u0435\u0441\u0442\u043e. \u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u041d\u0430 \u0434\u0435\u0432\u044f\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u043e\u0434\u0435, \u0432\u0437\u044f\u0442\u043e\u0435 \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1161\/\">\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a> GeoServer:<\/p>\n<pre><code class=\"java\">@Test public void testStore() {   Properties newProps = dao.toProperties();      \/\/ ....   Assert.assertEquals(newProps.size(), props.size());   for (Object key : newProps.keySet()) {     Object newValue = newProps.get(key);     Object oldValue = newProps.get(key);              \/\/ &lt;=     Assert.assertEquals(newValue, oldValue);   } } <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6027\/\">V6027<\/a> Variables &#8216;newValue&#8217;, &#8216;oldValue&#8217; are initialized through the call to the same function. It&#8217;s probably an error or un-optimized code. DataAccessRuleDAOTest.java 110, DataAccessRuleDAOTest.java 111<\/p>\n<p>\u0427\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0432 \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435? \u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"java\">@Test public void testStore() {   Properties newProps = dao.toProperties();    \/\/ properties equality does not seem to work...   Assert.assertEquals(newProps.size(), props.size());   for (Object key : newProps.keySet()) {     Object newValue = newProps.get(key);     Object oldValue = newProps.get(key);     Assert.assertEquals(newValue, oldValue);   } } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u043a\u0440\u044b\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u0432\u0430\u0441, \u043c\u0435\u043d\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u0438\u043b\u043e \u043d\u0430 \u0441\u043c\u0435\u0448\u043e\u043a.<\/p>\n<p>\u0421\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0439. \u0412\u043f\u043e\u043b\u043d\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0442\u0435\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u043f\u0430\u0434\u0430\u043b \u043d\u0430 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u043a\u0430 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u043e \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0439 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u044f \u0438 \u043d\u0435 \u0441\u0442\u0430\u043b \u043f\u043e\u0432\u044b\u0448\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0442\u043e\u043f\u0435.<\/p>\n<h3>8 \u043c\u0435\u0441\u0442\u043e. \u0412\u044b\u0441\u0442\u0440\u0435\u043b \u0432 \u043d\u043e\u0433\u0443<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0431\u0430\u0433\u0438 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/github.com\/stephengold\/jbullet\">JBullet<\/a> \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0430\u043c\u0438 \u0432 \u043d\u043e\u0433\u0443, \u0442\u043e \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0436\u043d\u043e. \u0412\u043e\u0442 \u0441\u0430\u043c\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1113\/\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>:<\/p>\n<pre><code class=\"java\">@Override public BroadphasePair findPair(BroadphaseProxy proxy0, BroadphaseProxy proxy1) {   BulletStats.gFindPairs++;   if (proxy0.getUid() &gt; proxy1.getUid()) {     BroadphaseProxy tmp = proxy0;     proxy0 = proxy1;     proxy1 = proxy0;   }   .... } <\/code><\/pre>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0432\u0430\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0433\u0434\u0435 \u0442\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0430. \u041d\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0442 \u043e\u043d\u043e:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6026\/\">V6026<\/a> This value is already assigned to the &#8216;proxy1&#8217; variable. HashedOverlappingPairCache.java 233<\/p>\n<p>\u0414\u0430, \u0434\u043e \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0425\u043e\u0442\u044f \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0451 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0439. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0443 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 JBullet \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u0442\u043e\u043c \u0441 C\/C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/bulletphysics\/bullet3\">bullet<\/a>, \u0438 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code>template &lt;typename T&gt; B3_FORCE_INLINE void b3Swap(T &amp;a, T &amp;b) {   T tmp = a;   a = b;   b = tmp; } <\/code><\/pre>\n<p>\u041d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u0418, \u0441\u0443\u0434\u044f \u043f\u043e git blame, \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>\u0417\u0430 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0435\u0437\u0430\u043c\u044b\u0441\u043b\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438 \u0441 \u0431\u043e\u0433\u0430\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u044f \u0438 \u043d\u0430\u0433\u0440\u0430\u0434\u0438\u043b \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043e\u0441\u044c\u043c\u044b\u043c \u043c\u0435\u0441\u0442\u043e\u043c. \u0410 \u0435\u0449\u0451, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u043e\u0446\u0435\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0431\u0430\u0433 \u0441 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u043e\u043c \u0432 \u043d\u043e\u0433\u0443 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0441\u0432\u044f\u0437\u0430\u043d \u0441 C++.<\/p>\n<h3>7 \u043c\u0435\u0441\u0442\u043e. \u0414\u0430\u0436\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u043e\u0448\u0438\u0431\u0430\u044e\u0442\u0441\u044f<\/h3>\n<p>\u041d\u0430\u0434\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0435\u0435\u0442 \u043c\u043d\u0435 \u0441\u0435\u0440\u0434\u0446\u0435, \u043f\u0440\u0438\u0447\u0451\u043c \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u0412\u043e\u0442 \u043a\u043e\u0434, \u0432\u0437\u044f\u0442\u044b\u0439 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1151\/\">\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a> GeoGebra:<\/p>\n<pre><code class=\"java\">@Override final public void update() {   ....   switch (angle.getAngleStyle()) {     ....     case EuclidianStyleConstants.RIGHT_ANGLE_STYLE_L:       \/\/ Belgian offset |_       if (square == null) {         square = AwtFactory.getPrototype().newGeneralPath();       } else {         square.reset();       }       length = arcSize * 0.7071067811865;       double offset = length * 0.4;       square.moveTo(           coords[0] + length * Math.cos(angSt)               + offset * Math.cos(angSt)               + offset * Math.cos(angSt + Kernel.PI_HALF),           coords[1]               - length * Math.sin(angSt)                   * view.getScaleRatio()               - offset * Math.sin(angSt)               - offset * Math.sin(angSt + Kernel.PI_HALF));       ....       break;     } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043c \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0441\u0430\u043c\u0438\u043c. \u0427\u0442\u043e\u0431\u044b \u0432\u044b \u043d\u0435 \u043f\u043e\u0434\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u044b \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u0432\u0435\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 PVS-Studio:<\/p>\n<p>V6107 The constant 0.7071067811865 is being utilized. The resulting value could be inaccurate. Consider using Math.sqrt(0.5). DrawAngle.java 303<\/p>\n<p>\u0414\u0430, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 <code>0.7071067811865<\/code> \u044d\u0442\u043e \u043d\u0435 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e<\/a>, \u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0437\u044f\u0442\u0438\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043d\u044f \u043e\u0442 0.5. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0442\u0435\u0440\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438? <a href=\"https:\/\/github.com\/geogebra\/geogebra\">GeoGebra<\/a> \u2014 \u044d\u0442\u043e \u0441\u043e\u0444\u0442 \u0434\u043b\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0432, \u0438 \u043b\u0438\u0448\u043d\u044f\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0442\u0430\u043c \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442.<\/p>\n<p>\u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u043d\u0435 \u0442\u0430\u043a \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430?<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f\u0445 \u044f \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u0438\u043b \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043a\u043e\u0434\u0430. \u0418 \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0431\u0430\u0432\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c, \u043a\u0430\u043a \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0430\u044e\u0442 \u043a\u043e\u0434, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435.<\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u044d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f Java \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u0434\u0432\u0437\u044f\u0442\u043e\u0441\u0442\u0438 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u0435\u0451 \u0432 \u0442\u043e\u043f, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043d\u0430 \u0441\u0435\u0434\u044c\u043c\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \ud83d\ude42<\/p>\n<\/div>\n<\/details>\n<h3>6 \u043c\u0435\u0441\u0442\u043e. \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u0432\u0437\u044f\u043b \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1128\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 DBeaver, \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u0412\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"java\">private List&lt;DBTTaskRun&gt; runs; .... private void loadRunsIfNeeded() {     if (runs == null) {         synchronized (this) {             if (runs == null) {                 runs = new ArrayList&lt;&gt;(loadRunStatistics());             }         }     } } <\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442, \u043d\u0430 \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6082\/\">V6082<\/a> Unsafe double-checked locking. The field should be declared as volatile. TaskImpl.java 59, TaskImpl.java317<\/p>\n<p>\u041f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e, \u043c\u043d\u0435 \u043e\u043d\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d Double-Checked Locking <a href=\"https:\/\/www.cs.umd.edu\/~pugh\/java\/memoryModel\/DoubleCheckedLocking.html\">\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a>. \u0412 \u0447\u0451\u043c \u043f\u043e\u0434\u0432\u043e\u0445? \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e 20 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \ud83d\ude42<\/p>\n<p>\u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c\u043e\u0439 \u044f \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1128\/\">\u0441\u0442\u0430\u0442\u044c\u0451\u0439<\/a>, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u0440\u0438\u0441\u0443\u044e, \u0432 \u0447\u0451\u043c \u0434\u0435\u043b\u043e.<\/p>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d Double-checked locking \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 &#171;\u0442\u044f\u0436\u0451\u043b\u043e\u0439&#187; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432 \u0431\u043b\u043e\u043a\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f &#171;\u043b\u0451\u0433\u043a\u0430\u044f&#187; \u0431\u0435\u0437 \u043d\u0435\u0433\u043e, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043e\u0431\u0435\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0435\u0441\u0443\u0440\u0441.<\/p>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <strong>\u043d\u0435\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430<\/strong>, \u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0433\u0443\u0442 <strong>\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439<\/strong>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c. \u0422\u0430\u043a, \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e, \u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0435\u0451 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0432\u0430\u043c \u0442\u0432\u0438\u0441\u0442: \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043e JDK 5. \u0410 \u0441 \u043f\u044f\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>volatile<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 <strong>happens-before<\/strong>. \u0418 \u0438\u043c\u0435\u043d\u043d\u043e \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<\/p>\n<p>\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0436\u0435\u043b\u0435\u0437\u0430 \u0438 JVM \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0434\u0430\u043b\u0435\u043a\u043e \u0448\u0430\u0433\u043d\u0443\u043b\u0430 \u0432\u043f\u0435\u0440\u0451\u0434, \u0438 <code>synchronized<\/code> \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 DCL-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043b\u0435\u0433\u043a\u043e \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0447\u0440\u0435\u0432\u0430\u0442\u043e \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c\u0438. \u042d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u0438 \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043c\u044b \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/examples\/v6082\/\">\u043d\u0430\u0445\u043e\u0434\u0438\u043c<\/a> \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0441 \u0434\u043e\u043b\u0433\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0442\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043f\u043e \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>5 \u043c\u0435\u0441\u0442\u043e. \u041c\u0438\u043a\u0440\u043e\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041f\u044f\u0442\u0451\u0440\u043a\u0443 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 DBeaver, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u043f\u0438\u0441\u0430\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1135\/\">\u0441\u0442\u0430\u0442\u044c\u044e<\/a>. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0432\u0430\u043c \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c:<\/p>\n<pre><code class=\"java\">@Override public boolean canEditObject(ExasolTableColumn object) {     ExasolTableBase exasolTableBase = object.getParentObject();     if (exasolTableBase != null &amp;         exasolTableBase.getClass().equals(ExasolTable.class)) {         return true;     } else {         return false;     } } <\/code><\/pre>\n<p>\u0418 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6030\/\">V6030<\/a> The method located to the right of the &#8216;&amp;&#8217; operator will be called regardless of the value of the left operand. Perhaps, it is better to use &#8216;&amp;&amp;&#8217;. ExasolTableColumnManager.java 79, DB2TableColumnManager.java 77<\/p>\n<p>\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f: \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 <code>&amp;&amp;<\/code> \u0441 \u0431\u0438\u0442\u043e\u0432\u044b\u043c <code>&amp;<\/code>. \u041e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e &#171;\u0418&#187; \u043d\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e &#171;\u0418&#187; \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <strong>\u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f<\/strong>. \u0418\u0437-\u0437\u0430 \u0435\u0451 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f, \u0434\u0430\u0436\u0435 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e <code>exasolTableBase != null<\/code> \u0432\u0435\u0440\u043d\u0451\u0442 <code>false<\/code>, \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043e <code>exasolTableBase.getClass()<\/code>, \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c NPE.<\/p>\n<p>\u041e\u043a\u0435\u0439, \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430, \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u043c\u0441\u044f? \u041a\u0430\u043a \u0431\u044b \u043d\u0438 \u0442\u0430\u043a. \u0412 DBeaver \u0442\u0430\u043a\u0438\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u0433\u043e. \u041e\u0447\u0435\u043d\u044c. \u0418 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0431\u044b\u043b\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u0430. \u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445.<\/p>\n<details class=\"spoiler\">\n<summary>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0432\u0435\u0434\u0443\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0430\u043c<\/summary>\n<div class=\"spoiler__content\">\n<p>ExasolSecurityPolicy.java:<\/p>\n<pre><code class=\"java\">public ExasolSecurityPolicy(....) {   ....   String value = JDBCUtils.safeGetString(dbResult, \"SYSTEM_VALUE\");      if (value.isEmpty() | value.equals(\"OFF\"))     this.enabled = false;   } else {     assignValues(ExasolSecurityPolicy.parseInput(value));   } } <\/code><\/pre>\n<p>ExasolConnectionManager.java:<\/p>\n<pre><code class=\"java\">@Override protected void addObjectModifyActions(....) {   ....   \/\/ url, username or password have changed   if (com.containsKey(\"url\") | com.containsKey(\"userName\") |       com.containsKey(\"password\"))   {     \/\/ possible loss of information - warn     ....     if (!(con.getUserName().isEmpty() | con.getPassword().isEmpty())) {       ....     }   } } <\/code><\/pre>\n<p>ExasolDataSource.java:<\/p>\n<pre><code class=\"java\">@Override public ErrorType discoverErrorType(@NotNull Throwable error) {   String errorMessage = error.getMessage();   if (errorMessage.contains(\"Feature not supported\")) {     return ErrorType.FEATURE_UNSUPPORTED;   } else if (errorMessage.contains(\"insufficient privileges\")) {     return ErrorType.PERMISSION_DENIED;   } else if (       errorMessage.contains(\"Connection lost\") |        errorMessage.contains(\"Connection was killed\") |        errorMessage.contains(\"Process does not exist\") |        errorMessage.contains(\"Successfully reconnected\") |        errorMessage.contains(\"Statement handle not found\") |       ....       )   {     return ErrorType.CONNECTION_LOST;   }   return super.discoverErrorType(error); } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0418\u0437\u0443\u0447\u0438\u0432 \u0442\u0435\u043c\u0443, \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u043a\u0440\u043e\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e. \u0414\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u0448\u0443 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1135\/\">\u0441\u0442\u0430\u0442\u044c\u044e<\/a>, \u0430 \u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0434\u0430\u043c \u043a\u0440\u0430\u0442\u043a\u0443\u044e \u0432\u044b\u0436\u0438\u043c\u043a\u0443.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u0430\u0436\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c \u0437\u0434\u0435\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0432 \u043d\u0435\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 <strong>\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439<\/strong> \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439.<\/p>\n<p>\u041a \u043d\u0430\u0448\u0435\u043c\u0443 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u044e, \u043a\u0443\u0441\u0442\u0430\u0440\u043d\u044b\u0439 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u044d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/b5b\/dca\/e71\/b5bdcae7111930a8f81365acf665d1d6.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/b5b\/dca\/e71\/b5bdcae7111930a8f81365acf665d1d6.png\"\/><\/figure>\n<p>\u041d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u044f, \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0438, \u0435\u0441\u043b\u0438 \u0435\u043c\u0443 \u0432\u0435\u0440\u0438\u0442\u044c, \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0430\u0436 \u043d\u0430 40% \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445.<\/p>\n<p>\u0418 \u043a \u0447\u0435\u043c\u0443 \u044f \u043f\u043e\u0434\u043d\u044f\u043b \u044d\u0442\u0443 \u0442\u0435\u043c\u0443? \u041a \u0442\u043e\u043c\u0443, \u043a\u0430\u043a\u0443\u044e \u0446\u0435\u043d\u0443 \u043d\u0435\u0441\u0443\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0438\u043a\u0440\u043e\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a, \u0438 \u0431\u0435\u0437\u0434\u0443\u043c\u043d\u043e \u043e\u0442 \u043d\u0435\u0433\u043e \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u043c. \u0422\u0430\u043a, \u043d\u0430\u0448 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0442\u0430\u043c \u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0440\u044f\u0434 \u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043e\u0442\u043a\u0430\u0437 \u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442. \u0412\u0437\u044f\u0442\u044c \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437-\u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0430 \u0432\u044b\u0448\u0435: \u043d\u0435 \u0441\u0430\u043c\u0430\u044f \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <code>contains<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u0441\u0435 \u0440\u0430\u0437\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0432\u043e\u0435\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/p>\n<p>\u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u043c\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432\u043e\u0442 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438 \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u043e\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0446\u0435\u043d\u0435 \u043c\u0438\u043a\u0440\u043e\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u044f\u0442\u0451\u0440\u043a\u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u043e\u043f\u0430.<\/p>\n<h3>4 \u043c\u0435\u0441\u0442\u043e. \u0422\u0435\u0441\u0442 \u043d\u0435 \u0443\u043f\u0430\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c<\/h3>\n<p>\u0427\u0430\u0441\u0442\u043e \u043f\u0430\u043d\u0430\u0446\u0435\u0435\u0439 \u043e\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u0430\u043c\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u043a\u0430 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b. \u0418 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c, \u043a\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0438 \u0442\u0435\u0441\u0442\u044b. \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1161\/\">\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a> GeoServer \u044d\u0442\u043e \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u044d\u0442\u043e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442. \u0412\u043e\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"java\">@Test public void testChallenge() throws Exception {   Map&lt;String, Object&gt; raw = getWorld();   try {     executeGetCoverageKvp(raw);     fail(\"This should have failed with a security exception\");   } catch (Throwable e) {     \/\/ make sure we are dealing with some security exception     Throwable se = null;     while (e.getCause() != null &amp;&amp; e.getCause() != e) {         \/\/ &lt;=       e = e.getCause();       if (SecurityUtils.isSecurityException(e)) {         se = e;       }     }        if (e == null) {                                            \/\/ &lt;=       fail(\"We should have got some sort of SpringSecurityException\");     } else {       \/\/ some mumbling about not having enough privileges       assertTrue(se.getMessage().contains(\"World\"));       assertTrue(se.getMessage().contains(\"privileges\"));     }   } } <\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u0438 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6060\/\">V6060<\/a> The &#8216;e&#8217; reference was utilized before it was verified against null. ResourceAccessManagerWCSTest.java 186, ResourceAccessManagerWCSTest.java 193<\/p>\n<p>\u0421 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0437\u0433\u043b\u044f\u0434\u0430 \u044d\u0442\u043e \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u0432\u0435\u0434\u044c \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e <a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6060\/\">V6060<\/a> \u0432\u044b\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434. \u0410 \u044f \u0432\u0435\u0434\u044c \u0435\u0449\u0451 \u0438 \u043e\u0431\u0435\u0449\u0430\u043b, \u0447\u0442\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u043c \u0432\u044b\u0431\u043e\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0441\u0442\u044c. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0451 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0442\u0435\u0441\u0442\u0430 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f, \u0432\u0435\u0434\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>e<\/code> \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u0438\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>catch<\/code> \u0438 \u0434\u0430\u043b\u0435\u0435 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 <code>null<\/code>. \u0422\u0430\u043a, \u043c\u043e\u0436\u043d\u043e \u0448\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c then-\u0432\u0435\u0442\u043a\u0443 \u0443\u0441\u043b\u043e\u0432\u0438\u044f <code>if(e == nul)<\/code> \u043a\u0430\u043a \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u0443\u044e. \u041d\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432 \u043a\u043e\u0440\u043d\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0423\u0436\u0435 \u043f\u043e\u043d\u044f\u043b\u0438, \u0432 \u0447\u0451\u043c \u043f\u043e\u0434\u0432\u043e\u0445?<\/p>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0432 \u0441\u0435\u0431\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u2014 <code>se<\/code>. \u0418 \u0432\u043e\u0442 \u0443 \u043d\u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u043b\u0430 \u0446\u0438\u043a\u043b\u0430. \u0422\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e <code>e<\/code> \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>se<\/code>.<\/p>\n<p>\u041d\u043e \u0438\u0437-\u0437\u0430 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438 then-\u0432\u0435\u0442\u043a\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u0443\u0437\u043d\u0430\u0435\u043c \u043e\u0431 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0442\u0430\u043a\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e, \u0432\u0435\u0434\u044c \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043e \u0431\u043e\u043b\u0438 \u0441\u0445\u043e\u0436\u0438.<\/p>\n<p>\u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0438\u0437 \u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0434\u0432\u0430 \u0443\u0440\u043e\u043a\u0430:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0434\u0430\u0436\u0435 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445. \u0418\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0433\u0447\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u043a\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u0441\u0442\u043e\u0432 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0432\u0435\u0434\u044c \u043e\u043d\u0438 \u0442\u043e\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u042d\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043b\u0430\u0437\u0435\u0439\u043a\u0438 \u0434\u043b\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u0443\u0436\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0417\u0430 \u0442\u0430\u043a\u0438\u0435 \u0446\u0435\u043d\u043d\u044b\u0435 \u0443\u0440\u043e\u043a\u0438 \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0438\u043b\u043e\u0441\u044c \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<h3>3 \u043c\u0435\u0441\u0442\u043e. Happy debugging, folks<\/h3>\n<p>\u0422\u0440\u043e\u0439\u043a\u0443 \u043f\u0440\u0438\u0437\u0451\u0440\u043e\u0432 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1117\/\">NetBeans<\/a>. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430 \u0431\u044b\u043b\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u044a\u0451\u043c\u043d\u043e\u0435:<\/p>\n<pre><code class=\"java\">private void mergeParallelInclusions(List&lt;IncludeDesc&gt; inclusions,                                      IncludeDesc original,                                      boolean preserveOriginal) {   IncludeDesc best = null;   ....   \/\/ 2nd remove incompatible inclusions, move compatible ones to same level   for (Iterator it=inclusions.iterator(); it.hasNext(); ) {     IncludeDesc iDesc = (IncludeDesc) it.next();     if (iDesc != best) {       if (!compatibleInclusions(iDesc, best, dimension)) {         it.remove();       } else if (iDesc.parent == best.parent &amp;&amp;                  iDesc.neighbor == best.neighbor &amp;&amp;                 (iDesc.neighbor != null || iDesc.index == iDesc.index)) {         it.remove(); \/\/ same inclusion twice (detect for better robustness)       }       ....     }     ....   }   ....   if (unifyGaps != null) {     \/\/ unify resizability of the border gaps collected for individual inclusions     for (LayoutInterval[] gaps : unifyGaps) {       int preferredFixedSide =                          fixedSideGaps[LEADING] &gt;= fixedSideGaps[TRAILING] ?                                                    LEADING : TRAILING;       for (int i=LEADING; i &lt;= TRAILING; i++) {         if (LayoutInterval.canResize(gaps[i]) &amp;&amp; !anyResizingNeighbor[i]             &amp;&amp; (anyResizingNeighbor[i^1] || preferredFixedSide == i)) {           operations.setIntervalResizing(gaps[i], false);           if (!LayoutInterval.canResize(gaps[i^1])) {             operations.setIntervalResizing(gaps[i^i], true);           }           break;         }       }     }   } } <\/code><\/pre>\n<p>\u0420\u0430\u0434\u0438 \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043c\u043e\u0433\u0443 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0432\u0430\u043c (\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0430\u0437) \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u044f \u043f\u043e\u043a\u0430 \u043f\u043e\u0434\u043e\u0436\u0434\u0443.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/a76\/119\/e17\/a76119e17fe2ad9813242364ce8cebb6.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/a76\/119\/e17\/a76119e17fe2ad9813242364ce8cebb6.png\"\/><\/figure>\n<p>\u041f\u043e\u0438\u0441\u043a\u0430\u043b\u0438?<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e. \u0422\u0435 \u0438\u0437 \u0432\u0430\u0441, \u043a\u0442\u043e \u043d\u0430\u0448\u0451\u043b \u043e\u0448\u0438\u0431\u043a\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 <code> iDesc.neighbor != null || iDesc.index == iDesc.index<\/code>, \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b\u0438 \ud83d\ude42<\/p>\n<p>\u041e\u043d\u0430 \u0442\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c, \u043d\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0442\u043e\u043f. \u0414\u0430, \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0443\u0442 \u0434\u0432\u0435, \u044f \u0432\u0430\u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u043c\u0430\u043d\u0443\u043b. \u041d\u043e \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0438 \u0431\u0435\u0437 \u0448\u0430\u043b\u043e\u0441\u0442\u0435\u0439? \ud83d\ude42<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0437\u0434\u0435\u0441\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0435\u0449\u0451 \u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438 <code>i^i<\/code>, \u0432\u044b\u0434\u0430\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6001\/\">V6001<\/a> There are identical sub-expressions &#8216;i&#8217; to the left and to the right of the &#8216;^&#8217; operator. LayoutFeeder.java 3897<\/p>\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f XOR \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430, \u0432\u0435\u0434\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 &#171;\u0418\u041b\u0418&#187; \u0441 \u0434\u0432\u0443\u043c\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0431\u044b\u043b\u0438, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u0442\u043e \u0432\u043e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0441\u0442\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">a<\/p>\n<\/th>\n<th>\n<p align=\"left\">b<\/p>\n<\/th>\n<th>\n<p align=\"left\">a^b<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u0442\u0438\u043d\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u044b \u0440\u0430\u0437\u043d\u044b\u0435. \u0423 \u043d\u0430\u0441 \u0436\u0435 \u0432\u0441\u0435 \u0431\u0438\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435.<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u043d\u0435 \u0442\u0430\u043a \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430? \u0411\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u0434 \u043d\u0435\u0439 \u0435\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <code>i^1<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0430 \u0434\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438 \u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0432\u0435\u0440\u0445\u0443 \u043c\u044b \u0443\u0436\u0435 \u0443\u0432\u0438\u0434\u0438\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 <code>i^1<\/code>.<\/p>\n<p>\u041d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a \u0432\u0430\u043c, \u043d\u043e \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u043e \u0437\u043d\u0430\u043c\u0435\u043d\u0438\u0442\u043e\u0435<\/p>\n<pre><code class=\"java\">#define true rand() % 2 \/\/ Happy debugging, folks! <\/code><\/pre>\n<p>\u0418\u043d\u0430\u0447\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u043e \u0432 \u043a\u043e\u0434. \u0415\u0441\u043b\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043e\u0442\u043c\u0435\u0441\u0442\u0438 \u0441\u043a\u0443\u0447\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u043e\u0439. \u0418 \u0434\u0430, \u0435\u0441\u043b\u0438 \u0432\u044b \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0441\u043c\u043e\u0433\u043b\u0438 \u0441\u0430\u043c\u0438 \u043d\u0430\u0439\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443, \u0442\u043e \u043e\u0442\u043c\u0435\u0447\u0430\u0439\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \ud83d\ude42<\/p>\n<h3>2 \u043c\u0435\u0441\u0442\u043e. \u041a\u043e\u0433\u0434\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u043e\u0434\u0432\u0435\u043b\u0438<\/h3>\n<p>\u0412\u044b\u0448\u0435 \u044f \u0443\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e DBeaver, \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0432 \u0432\u0442\u043e\u0440\u0443\u044e. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0441\u044c. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1132\/\">\u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a>.<\/p>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443 PVS-Studio \u043d\u0435 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0438\u0437 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <code>TextWithOpen<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 <code>isBinaryContents<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u0445:<\/p>\n<pre><code class=\"java\">public TextWithOpen(Composite parent, boolean multiFS, boolean secured) {     super(parent, SWT.NONE);      ....     if (!useTextEditor &amp;&amp; !isBinaryContents()) {         ....          editItem.setEnabled(false);     }      .... }  protected boolean isBinaryContents() {     return false; } <\/code><\/pre>\n<p>\u041d\u0443, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443 \u044d\u0442\u043e code smell, \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0444\u0430\u043a\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043d\u0435\u0442. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u044f \u0442\u0430\u043a \u0434\u0443\u043c\u0430\u043b \u0440\u0430\u043d\u044c\u0448\u0435 \u2014 \u043e \u043c\u043e\u0451\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u0441 \u044d\u0442\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u044f \u0438 \u043f\u0438\u0441\u0430\u043b \u0432 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1132\/\">\u043f\u043e\u043b\u043d\u043e\u0439<\/a> \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>\u0423 <code>TextWithOpen<\/code> \u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432, \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0438\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>TextWithOpenFile<\/code>. \u0422\u0430\u043c \u043c\u0435\u0442\u043e\u0434 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u0438 \u0432\u043c\u0435\u0441\u0442\u043e <code>false<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0443 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f:<\/p>\n<pre><code class=\"java\">public class TextWithOpenFile extends TextWithOpen {     private final boolean binary;     ....      @Override     protected boolean isBinaryContents() {         return binary;     }     .... } <\/code><\/pre>\n<p>\u0422\u0430\u043a, \u0443\u0436\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435, \u0430 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430?<\/p>\n<pre><code class=\"java\">public TextWithOpenFile(     Composite parent,     String title,     String[] filterExt,     int style,     boolean binary,     boolean multiFS,     boolean secured ) {     super(parent, multiFS, secured);     this.title = title;     this.filterExt = filterExt;     this.style = style;     this.binary = binary; } <\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u0438\u043b\u0438? \u041f\u043e\u043b\u0435 <code>binary<\/code> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u041d\u043e \u0432\u0435\u0434\u044c \u0432 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u0438\u0434\u0451\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u043e\u043b\u044e \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430!<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/420\/142\/d40\/420142d40affdeb8bd712f3c7a40919d.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/420\/142\/d40\/420142d40affdeb8bd712f3c7a40919d.png\"\/><\/figure>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u043e\u0442 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 PVS-Studio:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6052\/\">V6052<\/a> Calling overridden &#8216;isBinaryContents&#8217; method in &#8216;TextWithOpen&#8217; parent-class constructor may lead to use of uninitialized data. Inspect field: binary. TextWithOpenFile.java(77), TextWithOpen.java 59<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u0431\u0430\u0432\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u0432\u0451\u043b \u0441\u0435\u0431\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e: \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043f\u0430\u0433\u0433\u0435\u0442\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c, \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u043d\u043e\u0435 \u041e\u041e\u041f \u0447\u0435\u0440\u0435\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u041d\u043e \u043f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u0447\u0442\u043e \u0438 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0418, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0442\u0430\u043a\u0430\u044f (\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u0430\u044f) \u043a\u0440\u0430\u0441\u043e\u0442\u0430 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u2014 \u044d\u0442\u043e \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u0442\u043e\u0440\u043e\u0435 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<h3>1 \u043c\u0435\u0441\u0442\u043e. \u041e\u0434\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0434\u0440\u0443\u0433\u0443\u044e<\/h3>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0436\u0435, \u0432\u043e\u0442 \u0438 \u043f\u0435\u0440\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e. \u0411\u043e\u0440\u044c\u0431\u0430 \u0437\u0430 \u043d\u0435\u0433\u043e \u0431\u044b\u043b\u0430 \u0441\u0438\u043b\u044c\u043d\u0430, \u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0431\u044b\u043b\u043e \u043d\u0430\u0434\u043e. \u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0437\u044f\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1117\/\">\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a> NetBeans. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0432\u0430\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"java\">private void changeIgnoreStatus (File f) throws IOException {   File parent = f;   boolean isDirectory = f.isDirectory() &amp;&amp; (! Files.isSymbolicLink(f.toPath()));   StringBuilder sb = new StringBuilder('\/');   if (isDirectory) {     sb.append('\/');   }   boolean cont = true;   while (cont) {     sb.insert(0, parent.getName()).insert(0, '\/');     parent = parent.getParentFile();     String path = sb.toString();     if (parent.equals(getRepository().getWorkTree())) {       if (addStatement(new File(parent, Constants.DOT_GIT_IGNORE),           path, isDirectory, false) &amp;&amp;           handleAdditionalIgnores(path, isDirectory)) {         addStatement(new File(parent, Constants.DOT_GIT_IGNORE),                               path, isDirectory, true);       }       cont = false;     } else {       cont = addStatement(new File(parent, Constants.DOT_GIT_IGNORE),                                    path, isDirectory, false);    } } <\/code><\/pre>\n<p>\u042f \u043f\u043e\u0447\u0442\u0438 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0441\u0445\u043e\u0434\u0443 \u0442\u0430\u043a\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0441\u0430\u043c\u0438 \u0435\u0451 \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0438. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0442\u043e\u043c\u0438\u0442\u044c \u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043a\u0430\u0436\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6009\/\">V6009<\/a> Buffer capacity is set to &#8217;47&#8217; using a char value. Most likely, the &#8216;\/&#8217; symbol was supposed to be placed in the buffer. IgnoreUnignoreCommand.java 107<\/p>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u0434\u043e \u0441\u043c\u0435\u0448\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u0430\u044f: \u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 <code>StringBuilder<\/code> \u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 <code>char<\/code>. \u0410 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440? \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0432\u0438\u0434\u0438\u043c\u043e, \u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f <code>String<\/code>. \u0422\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>StringBuilder<\/code>-a \u0431\u044b\u043b\u043e \u0431\u044b \u044d\u0442\u0438\u043c \u0441\u043b\u0435\u0448\u0435\u043c.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432, \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439 <code>int<\/code>. \u0418 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 <code>StringBuilder<\/code>-\u0430. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 <code>char<\/code> \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e, \u0432\u0435\u0434\u044c \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043e\u043d\u0430 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0451\u0442. \u0410 \u0435\u0441\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d, \u0442\u043e \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435, \u043d\u0435 \u0432\u044b\u0437\u0432\u0430\u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>\u041d\u043e \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u044f, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e \u0434\u0432\u0435 \u043e\u0448\u0438\u0431\u043a\u0438. \u0413\u0434\u0435 \u0432\u0442\u043e\u0440\u0430\u044f, \u0438 \u043a\u0430\u043a\u0430\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0441\u0432\u044f\u0437\u044c? \u0427\u0442\u043e\u0431\u044b \u0432 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u0435\u043b\u0430\u0435\u0442.<\/p>\n<p>\u0410 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u043e \u0444\u0430\u0439\u043b\u0430 \u0438\u043b\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438. \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043a\u043e\u0434\u0430, \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u043f\u0443\u0442\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<ul>\n<li>\n<p>&#171;\/folder1\/file&#187; \u0434\u043b\u044f \u0444\u0430\u0439\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p>&#171;\/folder1\/folder\/&#187; \u0434\u043b\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421 \u0432\u0438\u0434\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434. \u0418 \u0432 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0441\u0430\u0434\u0430 \u2014 \u043a\u043e\u0434 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0430\u0434\u043e \ud83d\ude42 \u041d\u043e \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443, \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u044d\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>&#171;\/folder1\/file\/&#187;;<\/p>\n<\/li>\n<li>\n<p>&#171;\/folder1\/folder\/\/&#187;<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043b\u0438\u0448\u043d\u0438\u0439 \u0441\u043b\u0435\u0448 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0440\u043e\u043a\u0438. \u0410 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u044b \u043e\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043a\u043e\u0434 \u0432\u044b\u0448\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0442\u043e\u0440\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0441\u043b\u0435\u0448 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u043d\u0435 \u0432\u043e\u0437\u044b\u043c\u0435\u043b\u043e. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0435\u0434\u043e\u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u044f \u0431\u044b \u043d\u0435 \u0441\u0442\u0430\u043b, \u0432\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0438\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443, \u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u043f\u0435\u0440\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0442\u043e\u043f\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u2014 \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0438\u0435 \u0447\u0443\u0434\u0435\u0441\u0430, \u0430 \u0432\u044b \u0447\u0435\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043b\u0438? \ud83d\ude42<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u043c\u043e\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u043e \u0431\u0430\u0433\u0430\u0445. \u0415\u0441\u043b\u0438 \u0442\u0430\u043a, \u0442\u043e \u043e\u0442\u043c\u0435\u0442\u044c\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u0442\u0435, \u0447\u0442\u043e \u0432\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0438\u0441\u044c, \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u043d\u0435\u0441\u0442\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u0432 \u0442\u043e\u043f. \u041c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0438 \u0443\u0447\u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437 \ud83d\ude42<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438, \u0442\u043e \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u044e \u0432\u0430\u0441 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e \u0442\u043e\u043f \u0431\u0430\u0433\u043e\u0432 \u0437\u0430 2024 \u0433\u043e\u0434 \u0432 C# <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/csharp\/1203\/\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u044b\u043b\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PVS-Studio. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u044b\u0448\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 7.34, \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0435\u0451 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e <a href=\"https:\/\/pvs-studio.ru\/ru\/pvs-studio\/try-free\/?utm_source=website&amp;utm_medium=habr&amp;utm_campaign=article&amp;utm_content=1207\">\u044d\u0442\u043e\u0439<\/a> \u0441\u0441\u044b\u043b\u043a\u0435.<\/p>\n<p>\u0410 \u0447\u0442\u043e\u0431\u044b \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430, \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430:<\/p>\n<ul>\n<li>\n<p>PVS-Studio \u0432 <a href=\"https:\/\/x.com\/pvs_studio\">X<\/a>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0448 \u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u044b\u0439 <a href=\"https:\/\/pvs-studio.ru\/ru\/subscribe\/\">\u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442<\/a> \u0441\u0442\u0430\u0442\u0435\u0439;<\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0439 \u043b\u0438\u0447\u043d\u044b\u0439 <a href=\"https:\/\/twitter.com\/kvolokhovskii\">\u0431\u043b\u043e\u0433<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u043c!<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Konstantin Volohovsky. <a href=\"https:\/\/pvs-studio.com\/en\/blog\/posts\/java\/1207\/\">Top 10 most intriguing Java errors in 2024<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/869920\/\"> https:\/\/habr.com\/ru\/articles\/869920\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 2024 \u0433\u043e\u0434\u0443 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043e \u0447\u0451\u043c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0438\u0441\u0430\u043b\u0438 \u0432 \u0441\u0432\u043e\u0439 \u0431\u043b\u043e\u0433. \u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043d\u0430\u0441\u0442\u0430\u043b\u0430 \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u044f\u044f \u043f\u043e\u0440\u0430, \u0438 \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. \u0412\u043e\u0442 \u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 Java \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u0441\u0442\u0440\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0432 Open Source \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.<\/p>\n<figure class=\"\"><\/figure>\n<h3>\u041f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u0435<\/h3>\n<p>\u0422\u0440\u0430\u0434\u0438\u0446\u0438\u044e \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio, \u043c\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e, \u043d\u043e \u0442\u043e\u043f\u043e\u0432 \u0438\u043c\u0435\u043d\u043d\u043e Java \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u0431\u044b\u043b\u043e \u0430\u0436 \u0441 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/0788\/\">2020<\/a> \u0433\u043e\u0434\u0430. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0440\u0435\u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0443. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u0434\u043e\u0441\u0442\u0430\u043b\u0438 \u043c\u044f\u0433\u043a\u0438\u0439 \u043f\u043b\u0435\u0434 \u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0435\u0431\u0435 \u0442\u0451\u043f\u043b\u044b\u0439 \u0447\u0430\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0434\u043b\u044f \u0432\u0430\u0441 10 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0442\u043e\u043f \u043f\u0440\u043e\u0441\u0442\u044b\u0435:<\/p>\n<ul>\n<li>\n<p>\u043c\u043e\u0451 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435, \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0438 \u043e\u0431\u0449\u0430\u044f \u043d\u0435\u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 10 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0440\u0438\u0439, \u0438 \u043d\u0435 \u0431\u0435\u0437 \u043f\u043e\u0443\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0440\u043e\u043a\u043e\u0432 \u2014 \u041d\u043e\u0432\u044b\u0439 \u0413\u043e\u0434 \u0441\u043a\u043e\u0440\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \ud83d\ude42<\/p>\n<h3>10 \u043c\u0435\u0441\u0442\u043e. \u041d\u0430\u0437\u0430\u0434 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0435<\/h3>\n<p>\u041d\u0430 \u0434\u0435\u0441\u044f\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043d\u0430\u0441 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430.<\/p>\n<pre><code class=\"java\">public Builder setPersonalisation(Date date, ....) {   ....   final OutputStreamWriter     out = new OutputStreamWriter(bout, \"UTF-8\");   final DateFormat     format = new SimpleDateFormat(\"YYYYMMdd\");   out.write(format.format(date));     .... } <\/code><\/pre>\n<p>\u0418 \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043c\u043e\u0433 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043f\u0440\u0435\u0434\u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u044e\u044e \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443, \u0432\u0435\u0434\u044c \u0431\u0430\u0433 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438\u0441\u044c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0433\u043e\u0434 \ud83d\ude42 \u0423\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c, \u0441 \u0447\u0435\u043c \u043e\u043d \u0441\u0432\u044f\u0437\u0430\u043d?<\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 <code>SimpleDateFormat<\/code>. \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d \u0432\u0430\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c? \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u043f\u043e\u0447\u0442\u0438 \u043b\u044e\u0431\u0443\u044e \u0434\u0430\u0442\u0443, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u0430\u0442\u0443 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 (10.12.2024), \u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u2014 <code>20241210<\/code>.<\/p>\n<p>\u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 29.12.2024, \u0442\u043e \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0443\u0436\u0435 <code>20251229<\/code>. \u0422\u0430\u043a\u0438\u043c \u043d\u0435\u0445\u0438\u0442\u0440\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0432 \u043d\u043e\u0432\u044b\u0439 \u0433\u043e\u0434 \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0437\u0430\u0434, \u043a\u0441\u0442\u0430\u0442\u0438, \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u0438\u043c\u0432\u043e\u043b <code>Y<\/code> \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0435 \u0434\u043b\u044f <a href=\"https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/text\/SimpleDateFormat.html\">SimpleDateFormat<\/a> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0433\u043e\u0434, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043d\u043e\u043c\u0435\u0440\u0435 \u043d\u0435\u0434\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e, \u0442\u043e \u043d\u0435\u0434\u0435\u043b\u044f \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043d\u0435\u0451 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0447\u0435\u0442\u044b\u0440\u0435 \u0434\u043d\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0433\u043e\u0434\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u043d\u0435\u0434\u0435\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435, \u0442\u043e \u0432 \u043d\u043e\u0432\u044b\u0439 \u0433\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0430\u0436 \u043d\u0430 \u0442\u0440\u0438 \u0434\u043d\u044f \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>Y<\/code> \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0439 \u2014 <code>y<\/code>. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435, \u0442\u043e \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1185\/\">\u0437\u0430\u043c\u0435\u0442\u043a\u0430<\/a>.<\/p>\n<p>\u0412\u043e\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043b\u043e \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6122\/\">V6122<\/a> Usage of &#8216;Y&#8217; (week year) pattern was detected: it was probably intended to use &#8216;y&#8217; (year). SkeinParameters.java 246<\/p>\n<p>\u0418\u0437-\u0437\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u043d\u0435\u0434\u0435\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u0430\u0433 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043c\u0435\u0441\u0442\u0435? \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0435 \u0432 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/github.com\/bcgit\/bc-java\">Bouncy Castle<\/a>, \u0430 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435. \u0422\u0430\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0442 \u0431\u0430\u0433 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e <a href=\"https:\/\/github.com\/bcgit\/bc-java\/commit\/942fe041f2a5ef44e16eea48338a9244cdd1af93\">\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d<\/a>. \u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u0435\u0442 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u2014 \u0441\u043d\u043e\u0432\u0430 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \ud83d\ude42<\/p>\n<h3>9 \u043c\u0435\u0441\u0442\u043e. \u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u041d\u0430 \u0434\u0435\u0432\u044f\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u043e\u0434\u0435, \u0432\u0437\u044f\u0442\u043e\u0435 \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1161\/\">\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a> GeoServer:<\/p>\n<pre><code class=\"java\">@Test public void testStore() {   Properties newProps = dao.toProperties();      \/\/ ....   Assert.assertEquals(newProps.size(), props.size());   for (Object key : newProps.keySet()) {     Object newValue = newProps.get(key);     Object oldValue = newProps.get(key);              \/\/ &lt;=     Assert.assertEquals(newValue, oldValue);   } } <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6027\/\">V6027<\/a> Variables &#8216;newValue&#8217;, &#8216;oldValue&#8217; are initialized through the call to the same function. It&#8217;s probably an error or un-optimized code. DataAccessRuleDAOTest.java 110, DataAccessRuleDAOTest.java 111<\/p>\n<p>\u0427\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0432 \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435? \u041f\u043e\u0437\u0432\u043e\u043b\u044c\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438:<\/p>\n<pre><code class=\"java\">@Test public void testStore() {   Properties newProps = dao.toProperties();    \/\/ properties equality does not seem to work...   Assert.assertEquals(newProps.size(), props.size());   for (Object key : newProps.keySet()) {     Object newValue = newProps.get(key);     Object oldValue = newProps.get(key);     Assert.assertEquals(newValue, oldValue);   } } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u043a\u0440\u044b\u0432\u0430\u043b\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u0432\u0430\u0441, \u043c\u0435\u043d\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u0438\u043b\u043e \u043d\u0430 \u0441\u043c\u0435\u0448\u043e\u043a.<\/p>\n<p>\u0421\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0432\u0443\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u0439. \u0412\u043f\u043e\u043b\u043d\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0442\u0435\u0441\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u043f\u0430\u0434\u0430\u043b \u043d\u0430 \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u043a\u0430 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u043e \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0439 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u044f \u0438 \u043d\u0435 \u0441\u0442\u0430\u043b \u043f\u043e\u0432\u044b\u0448\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0442\u043e\u043f\u0435.<\/p>\n<h3>8 \u043c\u0435\u0441\u0442\u043e. \u0412\u044b\u0441\u0442\u0440\u0435\u043b \u0432 \u043d\u043e\u0433\u0443<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0431\u0430\u0433\u0438 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/github.com\/stephengold\/jbullet\">JBullet<\/a> \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0430\u043c\u0438 \u0432 \u043d\u043e\u0433\u0443, \u0442\u043e \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0436\u043d\u043e. \u0412\u043e\u0442 \u0441\u0430\u043c\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1113\/\">\u0441\u0442\u0430\u0442\u044c\u0438<\/a>:<\/p>\n<pre><code class=\"java\">@Override public BroadphasePair findPair(BroadphaseProxy proxy0, BroadphaseProxy proxy1) {   BulletStats.gFindPairs++;   if (proxy0.getUid() &gt; proxy1.getUid()) {     BroadphaseProxy tmp = proxy0;     proxy0 = proxy1;     proxy1 = proxy0;   }   .... } <\/code><\/pre>\n<p>\u0414\u0443\u043c\u0430\u044e, \u0432\u0430\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 PVS-Studio, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0433\u0434\u0435 \u0442\u0443\u0442 \u043e\u0448\u0438\u0431\u043a\u0430. \u041d\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0442 \u043e\u043d\u043e:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6026\/\">V6026<\/a> This value is already assigned to the &#8216;proxy1&#8217; variable. HashedOverlappingPairCache.java 233<\/p>\n<p>\u0414\u0430, \u0434\u043e \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0425\u043e\u0442\u044f \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0451 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0439. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0443 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 JBullet \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u0442\u043e\u043c \u0441 C\/C++ \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/github.com\/bulletphysics\/bullet3\">bullet<\/a>, \u0438 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code>template &lt;typename T&gt; B3_FORCE_INLINE void b3Swap(T &amp;a, T &amp;b) {   T tmp = a;   a = b;   b = tmp; } <\/code><\/pre>\n<p>\u041d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432\u043f\u043e\u043b\u043d\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e. \u0418, \u0441\u0443\u0434\u044f \u043f\u043e git blame, \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0442\u0430\u043a \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0437-\u0437\u0430 \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>\u0417\u0430 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u043f\u043e\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0435\u0437\u0430\u043c\u044b\u0441\u043b\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0438 \u0441 \u0431\u043e\u0433\u0430\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u044f \u0438 \u043d\u0430\u0433\u0440\u0430\u0434\u0438\u043b \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043e\u0441\u044c\u043c\u044b\u043c \u043c\u0435\u0441\u0442\u043e\u043c. \u0410 \u0435\u0449\u0451, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u044b \u043e\u0446\u0435\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0431\u0430\u0433 \u0441 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u043e\u043c \u0432 \u043d\u043e\u0433\u0443 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0441\u0432\u044f\u0437\u0430\u043d \u0441 C++.<\/p>\n<h3>7 \u043c\u0435\u0441\u0442\u043e. \u0414\u0430\u0436\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u043e\u0448\u0438\u0431\u0430\u044e\u0442\u0441\u044f<\/h3>\n<p>\u041d\u0430\u0434\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0435\u0435\u0442 \u043c\u043d\u0435 \u0441\u0435\u0440\u0434\u0446\u0435, \u043f\u0440\u0438\u0447\u0451\u043c \u043f\u043e \u043c\u043d\u043e\u0433\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u0412\u043e\u0442 \u043a\u043e\u0434, \u0432\u0437\u044f\u0442\u044b\u0439 \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1151\/\">\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a> GeoGebra:<\/p>\n<pre><code class=\"java\">@Override final public void update() {   ....   switch (angle.getAngleStyle()) {     ....     case EuclidianStyleConstants.RIGHT_ANGLE_STYLE_L:       \/\/ Belgian offset |_       if (square == null) {         square = AwtFactory.getPrototype().newGeneralPath();       } else {         square.reset();       }       length = arcSize * 0.7071067811865;       double offset = length * 0.4;       square.moveTo(           coords[0] + length * Math.cos(angSt)               + offset * Math.cos(angSt)               + offset * Math.cos(angSt + Kernel.PI_HALF),           coords[1]               - length * Math.sin(angSt)                   * view.getScaleRatio()               - offset * Math.sin(angSt)               - offset * Math.sin(angSt + Kernel.PI_HALF));       ....       break;     } } <\/code><\/pre>\n<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043c \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0441\u0430\u043c\u0438\u043c. \u0427\u0442\u043e\u0431\u044b \u0432\u044b \u043d\u0435 \u043f\u043e\u0434\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u044b \u0432 \u0441\u043f\u043e\u0439\u043b\u0435\u0440.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u0432\u0435\u0442<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 PVS-Studio:<\/p>\n<p>V6107 The constant 0.7071067811865 is being utilized. The resulting value could be inaccurate. Consider using Math.sqrt(0.5). DrawAngle.java 303<\/p>\n<p>\u0414\u0430, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 <code>0.7071067811865<\/code> \u044d\u0442\u043e \u043d\u0435 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e<\/a>, \u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0437\u044f\u0442\u0438\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u043d\u044f \u043e\u0442 0.5. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430 \u0442\u0430\u043a\u0430\u044f \u043f\u043e\u0442\u0435\u0440\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438? <a href=\"https:\/\/github.com\/geogebra\/geogebra\">GeoGebra<\/a> \u2014 \u044d\u0442\u043e \u0441\u043e\u0444\u0442 \u0434\u043b\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0432, \u0438 \u043b\u0438\u0448\u043d\u044f\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0442\u0430\u043c \u043d\u0435 \u043f\u043e\u043c\u0435\u0448\u0430\u0435\u0442.<\/p>\n<p>\u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u043c\u043d\u0435 \u0442\u0430\u043a \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430?<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u0430 \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f\u0445 \u044f \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u0438\u043b \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043a\u043e\u0434\u0430. \u0418 \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0431\u0430\u0432\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c, \u043a\u0430\u043a \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0430\u044e\u0442 \u043a\u043e\u0434, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435.<\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u044d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f Java \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0435\u0434\u0432\u0437\u044f\u0442\u043e\u0441\u0442\u0438 \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u0435\u0451 \u0432 \u0442\u043e\u043f, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043d\u0430 \u0441\u0435\u0434\u044c\u043c\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \ud83d\ude42<\/p>\n<\/div>\n<\/details>\n<h3>6 \u043c\u0435\u0441\u0442\u043e. \u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h3>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u0432\u0437\u044f\u043b \u0438\u0437 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1128\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 DBeaver, \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u0412\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"java\">private List&lt;DBTTaskRun&gt; runs; .... private void loadRunsIfNeeded() {     if (runs == null) {         synchronized (this) {             if (runs == null) {                 runs = new ArrayList&lt;&gt;(loadRunStatistics());             }         }     } } <\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442, \u043d\u0430 \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio:<\/p>\n<p><a href=\"https:\/\/pvs-studio.ru\/ru\/docs\/warnings\/v6082\/\">V6082<\/a> Unsafe double-checked locking. The field should be declared as volatile. TaskImpl.java 59, TaskImpl.java317<\/p>\n<p>\u041f\u0440\u0438 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0433\u043e, \u043c\u043d\u0435 \u043e\u043d\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d Double-Checked Locking <a href=\"https:\/\/www.cs.umd.edu\/~pugh\/java\/memoryModel\/DoubleCheckedLocking.html\">\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/a>. \u0412 \u0447\u0451\u043c \u043f\u043e\u0434\u0432\u043e\u0445? \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e 20 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \ud83d\ude42<\/p>\n<p>\u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c\u043e\u0439 \u044f \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/posts\/java\/1128\/\">\u0441\u0442\u0430\u0442\u044c\u0451\u0439<\/a>, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u0431\u0440\u0438\u0441\u0443\u044e, \u0432 \u0447\u0451\u043c \u0434\u0435\u043b\u043e.<\/p>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d Double-checked locking \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435. \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434 &#171;\u0442\u044f\u0436\u0451\u043b\u043e\u0439&#187; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432 \u0431\u043b\u043e\u043a\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f &#171;\u043b\u0451\u0433\u043a\u0430\u044f&#187; \u0431\u0435\u0437 \u043d\u0435\u0433\u043e, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043e\u0431\u0435\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0435\u0441\u0443\u0440\u0441.<\/p>\n<p>\u0422\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 <strong>\u043d\u0435\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430<\/strong>, \u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0433\u0443\u0442 <strong>\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439<\/strong>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c. \u0422\u0430\u043a, \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e, \u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0435\u0451 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0432\u0430\u043c \u0442\u0432\u0438\u0441\u0442: \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043e JDK 5. \u0410 \u0441 \u043f\u044f\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>volatile<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 <strong>happens-before<\/strong>. \u0418 \u0438\u043c\u0435\u043d\u043d\u043e \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<\/p>\n<p>\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0436\u0435\u043b\u0435\u0437\u0430 \u0438 JVM \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0434\u0430\u043b\u0435\u043a\u043e \u0448\u0430\u0433\u043d\u0443\u043b\u0430 \u0432\u043f\u0435\u0440\u0451\u0434, \u0438 <code>synchronized<\/code> \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 DCL-\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043b\u0435\u0433\u043a\u043e \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0447\u0440\u0435\u0432\u0430\u0442\u043e \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c\u0438. \u042d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u0438 \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043c\u044b \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 <a href=\"https:\/\/pvs-studio.ru\/ru\/blog\/examples\/v6082\/\">\u043d\u0430\u0445\u043e\u0434\u0438\u043c<\/a> \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0441 \u0434\u043e\u043b\u0433\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0442\u0430\u043a\u0438\u0435<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-443549","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443549","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=443549"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443549\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=443549"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=443549"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=443549"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}