{"id":309148,"date":"2020-08-28T15:00:35","date_gmt":"2020-08-28T15:00:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=309148"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2020-08-28T15:00:35","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=309148","title":{"rendered":"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0434\u0430 XMage \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0434\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 Dragon&#8217;s Maze"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/516980\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ab5\/41b\/2b4\/ab541b2b4f379f0af908f736888b87f2.png\" alt=\"image1.png\"><\/div>\n<p>  XMage \u2014 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 Magic: The Gathering (MTG). XMage \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2010 \u0433\u043e\u0434\u0430. \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0431\u044b\u043b\u043e \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043e 182 \u0440\u0435\u043b\u0438\u0437\u0430, \u043d\u0430\u0431\u0440\u0430\u043b\u0430\u0441\u044c \u0446\u0435\u043b\u0430\u044f \u0430\u0440\u043c\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u0432, \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0434 \u043f\u043e\u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u043c \u0432 \u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438! \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0435\u0434\u0438\u043d\u043e\u0440\u043e\u0433 \u0438\u0437 PVS-Studio \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 XMage, \u0438 \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442, \u043c\u043e\u0436\u0435\u0442 \u0438 \u0441\u0445\u043b\u0435\u0441\u0442\u043d\u0435\u0442\u0441\u044f \u0441 \u043a\u0435\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0431\u043e\u044e.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/h2>\n<p>  <a href=\"https:\/\/github.com\/magefree\/mage\">XMage<\/a> \u2014 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0443\u0436\u0435 10 \u043b\u0435\u0442. \u0415\u0433\u043e \u0446\u0435\u043b\u044c \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0443\u044e, \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043e\u043d\u043b\u0430\u0439\u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0447\u043d\u043e\u0439 \u0438\u0433\u0440\u044b <a href=\"https:\/\/magic.wizards.com\/\">Magic: the Gathering<\/a>.<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\u0434\u043e\u0441\u0442\u0443\u043f \u043a ~19 000 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u0430\u0440\u0442, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0437\u0430 20-\u043b\u0435\u0442\u043d\u044e\u044e \u0438\u0441\u0442\u043e\u0440\u0438\u044e MTG;<\/li>\n<li>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0433\u0440\u044b;<\/li>\n<li>\u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u043d\u0430 \u043e\u0431\u0449\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435;<\/li>\n<li>\u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0441 \u0438\u0433\u0440\u043e\u0439 \u043f\u0440\u043e\u0442\u0438\u0432 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 (AI);<\/li>\n<li>\u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0438 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0438\u0433\u0440\u044b (Standard, Modern, Vintage, Commander \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435);<\/li>\n<li>\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0445 \u043c\u0430\u0442\u0447\u0435\u0439, \u0442\u0430\u043a \u0438 \u0442\u0443\u0440\u043d\u0438\u0440\u043e\u0432.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u0421\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 <a href=\"https:\/\/delftswa.gitbooks.io\/desosa2018\/content\/xmage\/chapter.html\">\u0440\u0430\u0431\u043e\u0442\u0443<\/a> \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u0414\u0435\u043b\u0444\u0442\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 2018 \u0433\u043e\u0434\u0430 (\u043c\u0430\u0433\u0438\u0441\u0442\u0435\u0440\u0441\u043a\u0438\u0439 \u043a\u0443\u0440\u0441 <a href=\"https:\/\/se.ewi.tudelft.nl\/delftswa\/\">Software Architecture<\/a>). \u041e\u043d\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u0430\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0440\u0435\u0431\u044f\u0442\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 open-source \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u043c\u0438 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u0412 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u043e\u0441\u044c\u043c\u0438\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u0438\u0437\u0443\u0447\u0430\u043b\u0438 \u043a\u0443\u0440\u0441 \u0438 open-source \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0438 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0440\u0435\u0431\u044f\u0442\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0435\u043a\u0442 XMage, \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 SonarQube (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u0446\u0438\u043a\u043b\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0437\u0430\u043f\u0430\u0445\u0438 \u043a\u043e\u0434\u0430, \u043e\u0448\u0438\u0431\u043a\u0438, \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0442.\u0434.).<\/p>\n<p>  \u041c\u043e\u0451 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u043b\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 2018 \u0433\u043e\u0434\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 SonarQube&#39;\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e 700 \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432 (bugs, vulnerabilities) \u043d\u0430 1 000 000 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041f\u043e\u043a\u043e\u043f\u0430\u0432\u0448\u0438\u0441\u044c \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0440\u0435\u0431\u044f\u0442-\u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u0432, \u044f \u0432\u044b\u044f\u0432\u0438\u043b, \u0447\u0442\u043e \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430 \u0441 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u043d\u0438 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 pull-request \u043d\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 30 \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432 \u0438\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 &quot;Blocker&quot; \u0438\u043b\u0438 &quot;Critical&quot;. \u0427\u0442\u043e \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043d\u043e \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u0445 \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043c\u0438\u043c\u043e \u0433\u043b\u0430\u0437.<\/p>\n<p>  \u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 2 \u0433\u043e\u0434\u0430 \u0438 \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043f\u043e\u0434\u0440\u043e\u0441\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 250 000 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u2014 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u043e\u0432\u043e\u0434 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0442\u0430\u043c \u0434\u0435\u043b\u0430.<\/p>\n<h2>\u041e\u0431 \u0430\u043d\u0430\u043b\u0438\u0437\u0435<\/h2>\n<p>  \u0414\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u044f \u0432\u0437\u044f\u043b \u0440\u0435\u043b\u0438\u0437 XMage \u2014 <a href=\"https:\/\/github.com\/magefree\/mage\/tree\/xmage_1.4.44V0\">1.4.44V0<\/a>.<\/p>\n<p>  \u0421 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0432\u0435\u0437\u043b\u043e. \u0421\u043e\u0431\u0440\u0430\u0442\u044c XMage \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Maven \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e (\u043a\u0430\u043a \u0438 \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438):<\/p>\n<pre><code class=\"java\">mvn clean install -DskipTests<\/code><\/pre>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0435 \u043e\u0442 \u043c\u0435\u043d\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c. \u041a\u0440\u0443\u0442\u043e \u0436\u0435?<\/p>\n<p>  \u0421 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 PVS-Studio \u0432 Maven \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c -\u0432\u0441\u0435 \u043a\u0430\u043a \u0432 <a href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a>. <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e 911 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 674 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f 1 \u0438 2 \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0441\u0442\u0438. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f 3 \u0443\u0440\u043e\u0432\u043d\u044f \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0430\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u0435\u043b\u0438\u043a \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439. \u0425\u043e\u0447\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0430\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0431\u043e\u044e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u043b\u044c\u0437\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0435 \u0434\u0435\u0444\u0435\u043a\u0442\u044b \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0438\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0438\u0445 \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043c, \u043a\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c, \u043d\u0435\u0436\u0435\u043b\u0438 \u043c\u043d\u0435:<\/p>\n<ul>\n<li>V6022, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0438\u0449\u0435\u0442 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445\/\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u0445. \u041d\u0430 \u0438\u0445 \u0434\u043e\u043b\u044e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0430\u0436 336 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439.<\/li>\n<li>V6014, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0432\u0435\u0442\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. 73 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/li>\n<li>V6021, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u043f\u0440\u043e \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442. 36 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439.<\/li>\n<li>V6048, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c. 17 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439.<\/li>\n<\/ul>\n<p>  \u041f\u043b\u044e\u0441 \u043a \u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u044b\u0434\u0430\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 20 \u044f\u0432\u043d\u044b\u0445 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439. \u0417\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 todo! <\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0432\u044b\u0447\u0435\u0441\u0442\u044c, \u0442\u043e \u043a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u043a\u043e \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 190 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439.<\/p>\n<p>  \u041f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0444\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u043b\u0438\u0431\u043e \u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439, \u043b\u0438\u0431\u043e \u0441 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439. \u0422\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u043c \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a \u0438 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435, \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0432\u044b\u0434\u0435\u043b\u0438\u043b 11 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0430\u043c\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c\u0443 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044e.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0433\u043b\u044f\u043d\u0435\u043c, \u0447\u0442\u043e \u0432\u044b\u0448\u043b\u043e.<\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N1<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6003\/\">V6003<\/a> The use of &#39;if (card != null) {&#8230;} else if (card != null) {&#8230;}&#39; pattern was detected. There is a probability of logical error presence. TorrentialGearhulk.java(90), TorrentialGearhulk.java(102)<\/p>\n<pre><code class=\"java\">@Override public boolean apply(Game game, Ability source) {   ....   Card card = game.getCard(....);   if (card != null) {       ....   } else if (card != null) {       ....   }   .... }<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e: \u0442\u0435\u043b\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <i>if (card != null)<\/i> \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 <i>if-else-if<\/i> \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043b\u0438\u0431\u043e \u043d\u0435 \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u043b\u0438\u0431\u043e <i>card != null<\/i> \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 <i>false<\/i>.<\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N2<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6004\/\">V6004<\/a> The &#39;then&#39; statement is equivalent to the &#39;else&#39; statement. AsThoughEffectImpl.java(35), AsThoughEffectImpl.java(37)<\/p>\n<pre><code class=\"java\">@Override public boolean applies(....) {   \/\/ affectedControllerId = player to check   if (getAsThoughEffectType().equals(AsThoughEffectType.LOOK_AT_FACE_DOWN)) {     return applies(objectId, source, playerId, game);   } else {     return applies(objectId, source, playerId, game);   } }<\/code><\/pre>\n<p>  \u0411\u0430\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u043c\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a open-source \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. Copy-paste? \u0418\u043b\u0438 \u044f \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u044e? \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0443, \u0447\u0442\u043e \u0432 \u0432\u0435\u0442\u043a\u0435 <i>else<\/i> \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <i>false<\/i>.<\/p>\n<p>  P.S. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e, \u0442\u0443\u0442 \u043d\u0435\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <i>applies(&#8230;.)<\/i>, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435:<\/p>\n<ul>\n<li>V6004 The &#39;then&#39; statement is equivalent to the &#39;else&#39; statement. GuiDisplayUtil.java(194), GuiDisplayUtil.java(198)<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N3<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6007\/\">V6007<\/a> Expression &#39;filter.getMessage().toLowerCase(Locale.ENGLISH).startsWith(&quot;Each &quot;)&#39; is always false. SetPowerToughnessAllEffect.java(107)<\/p>\n<pre><code class=\"java\">@Override public String getText(Mode mode) {   StringBuilder sb = new StringBuilder();   ....   if (filter.getMessage().toLowerCase(Locale.ENGLISH).startsWith(&quot;Each &quot;)) {     sb.append(&quot; has base power and toughness &quot;);   } else {     sb.append(&quot; have base power and toughness &quot;);   }   ....   return sb.toString(); }<\/code><\/pre>\n<p>  \u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6007\/\">V6007<\/a> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. XMage \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 (79 \u0448\u0442\u0443\u043a). \u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0432\u0441\u0435 \u043f\u043e \u0434\u0435\u043b\u0443, \u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e \u043d\u0430 debug, \u0442\u043e \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u0435, \u0442\u043e \u0435\u0449\u0435 \u043d\u0430 \u0447\u0442\u043e. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0442\u0430\u043a\u0438\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043b\u0443\u0447\u0448\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u0432\u0442\u043e\u0440\u0443 \u043a\u043e\u0434\u0430, \u043d\u0435\u0436\u0435\u043b\u0438 \u043c\u043d\u0435. <\/p>\n<p>  \u0414\u0430\u043d\u043d\u043e\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435, \u043e\u0434\u043d\u0430\u043a\u043e, \u0442\u043e\u0447\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 <i>filter.getMessage()<\/i> \u043a <i>sb <\/i>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442 &quot; has &#8230;&quot;, \u043b\u0438\u0431\u043e &quot; have &#8230;&quot;. \u041d\u043e \u043e\u0448\u0438\u0431\u043e\u0447\u043a\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442, \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430\u0441\u044c \u0441 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u044b, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432 \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u044d\u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u043d\u0438\u0436\u043d\u0438\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440. \u0423\u043f\u0441. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 &quot; have &#8230;&quot;. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0435\u0444\u0435\u043a\u0442\u0430 \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439, \u043d\u043e \u0442\u043e\u0436\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0439: \u0433\u0434\u0435-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0433\u0440\u0430\u043c\u043e\u0442\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442.<\/p>\n<p>  \u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438:<\/p>\n<ul>\n<li>V6007 Expression &#39;t.startsWith(&quot;-&quot;)&#39; is always false. BoostSourceEffect.java(103)<\/li>\n<li>V6007 Expression &#39;setNames.isEmpty()&#39; is always false. DownloadPicturesService.java(300)<\/li>\n<li>V6007 Expression &#39;existingBucketName == null&#39; is always false. S3Uploader.java(23)<\/li>\n<li>V6007 Expression &#39;!lastRule.endsWith(&quot;.&quot;)&#39; is always true. Effects.java(76)<\/li>\n<li>V6007 Expression &#39;subtypesToIgnore::contains&#39; is always false. VerifyCardDataTest.java(893)<\/li>\n<li>V6007 Expression &#39;notStartedTables == 1&#39; is always false. MageServerImpl.java(1330)<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N4<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6008\/\">V6008<\/a> Null dereference of &#39;savedSpecialRares&#39;. DragonsMaze.java(230)<\/p>\n<pre><code class=\"java\">public final class DragonsMaze extends ExpansionSet {   ....   private List&lt;CardInfo&gt; savedSpecialRares = new ArrayList&lt;&gt;();   ....   @Override   public List&lt;CardInfo&gt; getSpecialRare() {     if (savedSpecialRares == null) {                    \/\/ &lt;=       CardCriteria criteria = new CardCriteria();       criteria.setCodes(&quot;GTC&quot;).name(&quot;Breeding Pool&quot;);       savedSpecialRares.addAll(....);                   \/\/ &lt;=       criteria = new CardCriteria();       criteria.setCodes(&quot;GTC&quot;).name(&quot;Godless Shrine&quot;);       savedSpecialRares.addAll(....);       ....     }     return new ArrayList&lt;&gt;(savedSpecialRares);   } }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438 <i>savedSpecialRares<\/i>, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438. <\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u043c: \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043b\u0438 <i>savedSpecialRares == null<\/i> \u0441 <i>savedSpecialRares != null. <\/i>\u041d\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 NPE \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 <i>ArrayList<\/i> \u043f\u0440\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430, \u0442\u0430\u043a \u043a\u0430\u043a <i>savedSpecialRares == null<\/i> \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043e. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0434 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u043c \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0441 \u043a\u043e\u0434\u043e\u043c, \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e s<i>avedSpecialRares<\/i> \u0441\u0440\u0430\u0437\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0435\u0439 \u043f\u0440\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430\u043c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e <i>savedSpecialRares <\/i>\u043d\u0438\u043a\u043e\u0433\u0434\u0430\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 <i>null,<\/i> \u0438 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0434\u0435\u043b\u043e \u0442\u0430\u043a \u0438 \u043d\u0435 \u0434\u043e\u0439\u0434\u0435\u0442. \u041a\u0430\u043a \u0438\u0442\u043e\u0433, \u043c\u0435\u0442\u043e\u0434 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e.<\/p>\n<p>  P.S. \u0414\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <i>savedSpecialRares == null<\/i> \u043d\u0430 <i>savedSpecialRares.isEmpty()<\/i>.<\/p>\n<p>  P.P.S. \u0423\u0432\u044b, \u043d\u043e \u043f\u043e\u043a\u0430 \u0447\u0442\u043e, \u0438\u0433\u0440\u0430\u044f \u0432 XMage, \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0434\u043a\u0438\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 <a href=\"https:\/\/mtg.gamepedia.com\/Dragon%27s_Maze\">Dragon&#39;s Maze<\/a>.<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043b\u0443\u0447\u0430\u0439 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438:<\/p>\n<ul>\n<li>V6008 Null dereference of &#39;match&#39;. TableController.java(973)<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N5<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6012\/\">V6012<\/a> The &#39;?:&#39; operator, regardless of its conditional expression, always returns one and the same value &#39;table.getCreateTime()&#39;. TableManager.java(418), TableManager.java(418)<\/p>\n<pre><code class=\"java\">private void checkTableHealthState() {   ....   logger.debug(.... + formatter.format(table.getStartTime() == null                                         ? table.getCreateTime()                                         : table.getCreateTime()) + ....);   .... }<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0442\u0435\u0440\u043d\u0430\u0440\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <i>?:<\/i> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044f <i>table.getStartTime() == null<\/i>. \u041f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0441\u044b\u0433\u0440\u0430\u043b\u043e \u0437\u043b\u0443\u044e \u0448\u0443\u0442\u043a\u0443 \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"java\">private void checkTableHealthState() {   ....   logger.debug(.... + formatter.format(table.getStartTime() == null                                         ? table.getCreateTime()                                         : table.getStartTime()) + ....);   .... }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N6<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6026\/\">V6026<\/a> This value is already assigned to the &#39;this.loseOther&#39; variable. BecomesCreatureTypeTargetEffect.java(54)<\/p>\n<pre><code class=\"java\">public BecomesCreatureTypeTargetEffect(final BecomesCreatureTypeTargetEffect effect) {   super(effect);   this.subtypes.addAll(effect.subtypes);   this.loseOther = effect.loseOther;   this.loseOther = effect.loseOther; }<\/code><\/pre>\n<p>  \u0414\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u0441\u043b\u043e\u0432\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u043b\u0451\u043a\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0433\u043e\u0440\u044f\u0447\u0438\u0445 \u043a\u043b\u0430\u0432\u0438\u0448 \u0438 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u044d\u0442\u043e\u0433\u043e. \u041d\u043e \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e <i>effect<\/i> \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0435\u0439, \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0430 \u043d\u0435\u043c \u0437\u0430\u043e\u0441\u0442\u0440\u0438\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N7<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6036\/\">V6036<\/a> The value from the uninitialized &#39;selectUser&#39; optional is used. Session.java(227)<\/p>\n<pre><code class=\"java\">public String connectUserHandling(String userName, String password) {   ....   if (!selectUser.isPresent()) {  \/\/ user already exists       selectUser = UserManager.instance.getUserByName(userName);       if (selectUser.isPresent()) {           User user = selectUser.get();             ....       }   }   User user = selectUser.get(); \/\/ &lt;=   .... }<\/code><\/pre>\n<p>  \u041f\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e <i>selectUser.get()<\/i> \u043c\u043e\u0436\u0435\u0442 \u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <i>NoSuchElementException.<\/i><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0447\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0435\u0440\u0438\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044e, \u0447\u0442\u043e <i>user<\/i> \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442:<\/p>\n<pre><code class=\"java\">.... if (!selectUser.isPresent()) {  \/\/ user already exists   .... } User user = selectUser.get() ....<\/code><\/pre>\n<p>  \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0442\u0435\u043b\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0418 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041d\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u0437\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u0435\u043d \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0441 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d \u0442\u0430\u043a \u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f?<\/p>\n<p>  \u0410 \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442? <\/p>\n<pre><code class=\"java\">.... if (!selectUser.isPresent()) {  \/\/ user already exists     selectUser = UserManager.instance.getUserByName(userName);     if (selectUser.isPresent()) {       ....     } } User user = selectUser.get(); \/\/ &lt;= ....<\/code><\/pre>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u0432 \u0442\u0435\u043b\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0447\u0435\u0440\u0435\u0437 <i>getUserByName(). <\/i>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442 \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u044c, \u0438 \u044d\u0442\u043e \u043d\u0430\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u043d\u0430 \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e <i>selectUser<\/i> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u0412\u0435\u0442\u043a\u0438 <i>else<\/i> \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439 \u043d\u0435\u0442, \u0447\u0442\u043e \u0434\u0430\u043b\u0435\u0435 \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a <i>NoSuchElementException <\/i>\u043d\u0430 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043a\u043e\u0434\u0430. <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N8<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6042\/\">V6042<\/a> The expression is checked for compatibility with type &#39;A&#39; but is cast to type &#39;B&#39;. CheckBoxList.java(586)<\/p>\n<pre><code class=\"java\">\/**  * sets the model - must be an instance of CheckBoxListModel  *   * @param model the model to use  * @throws IllegalArgumentException if the model is not an instance of  *           CheckBoxListModel  * @see CheckBoxListModel  *\/ @Override public void setModel(ListModel model) {   if (!(model instanceof CheckBoxListModel)) {     if (model instanceof javax.swing.DefaultListModel) {        super.setModel((CheckBoxListModel)model);         \/\/ &lt;=     }     else {       throw new IllegalArgumentException(           &quot;Model must be an instance of CheckBoxListModel!&quot;);     }   }   else {     super.setModel(model);   } }<\/code><\/pre>\n<p>  \u0410\u0432\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0437\u0430\u043f\u0443\u0442\u0430\u043b\u0441\u044f: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <i>model<\/i> \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <i>CheckBoxListModel<\/i>, \u0430 \u043f\u043e\u0442\u043e\u043c \u0432 \u0438\u0442\u043e\u0433\u0435 \u044f\u0432\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a \u044d\u0442\u043e\u043c\u0443 \u0442\u0438\u043f\u0443. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434 <i>setModel<\/i> \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442 <i>ClassCastException<\/i>, \u0434\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<p>  \u0424\u0430\u0439\u043b <i>CheckBoxList.java<\/i> \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d 2 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, \u0438 \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0436\u0438\u0432\u0435\u0442 \u0432 \u043a\u043e\u0434\u0435 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440. \u0422\u0435\u0441\u0442\u043e\u0432 \u043d\u0430 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0432\u0438\u0434\u0438\u043c\u043e, \u043d\u0435\u0442, \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0442\u043e\u0436\u0435 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0436\u0438\u0432\u0435\u0442. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043a\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u0432\u044f\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0438 \u043f\u0440\u043e\u0447\u0442\u0435\u0442 Javadoc, \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c <i>IllegalArgumentException<\/i>, \u0430 \u043d\u0435 <i>ClassCastException<\/i>. \u041d\u0435 \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043a\u0442\u043e-\u0442\u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442.<\/p>\n<p>  \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u043a\u043e\u0434, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"java\">public void setModel(ListModel model) {   if (!(model instanceof CheckBoxListModel)) {      throw new IllegalArgumentException(         &quot;Model must be an instance of CheckBoxListModel!&quot;);     }   else {     super.setModel(model);   } }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N9<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6060\/\">V6060<\/a> The &#39;player&#39; reference was utilized before it was verified against null. VigeanIntuition.java(79), VigeanIntuition.java(78)<\/p>\n<pre><code class=\"java\">@Override public boolean apply(Game game, Ability source) {     MageObject sourceObject = game.getObject(source.getSourceId());     Player player = game.getPlayer(source.getControllerId());     Library library = player.getLibrary();                           \/\/ &lt;=     if (player != null &amp;&amp; sourceObject != null &amp;&amp; library != null) { \/\/ &lt;=         ....     } }<\/code><\/pre>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6060\/\">V6060<\/a> \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 <i>null<\/i>. \u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0447\u0430\u0441\u0442\u0435\u043d\u044c\u043a\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0445 open-source \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432: \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u044d\u0442\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0438\u043b\u0438 \u0441\u043c\u0435\u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u0432 \u0443 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <i>getPlayer()<\/i>, \u0442\u043e \u0432\u0441\u0451 \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0430 \u0441\u0432\u043e\u0438 \u043c\u0435\u0441\u0442\u0430:<\/p>\n<pre><code class=\"java\">\/\/ Result must be checked for null. \/\/ Possible errors search pattern: (\\S*) = game.getPlayer.+\\n(?!.+\\1 != null) Player getPlayer(UUID playerId);<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N10<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6072\/\">V6072<\/a> Two similar code fragments were found. Perhaps, this is a typo and &#39;playerB&#39; variable should be used instead of &#39;playerA&#39;. SubTypeChangingEffectsTest.java(162), SubTypeChangingEffectsTest.java(158), SubTypeChangingEffectsTest.java(156), SubTypeChangingEffectsTest.java(160)<\/p>\n<pre><code class=\"java\">@Test public void testArcaneAdaptationGiveType() {     addCard(Zone.HAND, playerA, &quot;Arcane Adaptation&quot;, 1); \/\/ Enchantment {2}{U}     addCard(Zone.BATTLEFIELD, playerA, &quot;Island&quot;, 3);      addCard(Zone.HAND, playerA, &quot;Silvercoat Lion&quot;);     addCard(Zone.BATTLEFIELD, playerA, &quot;Silvercoat Lion&quot;);     addCard(Zone.GRAVEYARD, playerA, &quot;Silvercoat Lion&quot;);   \/\/ &lt;=      addCard(Zone.HAND, playerB, &quot;Silvercoat Lion&quot;);     addCard(Zone.BATTLEFIELD, playerB, &quot;Silvercoat Lion&quot;);     addCard(Zone.GRAVEYARD, playerA, &quot;Silvercoat Lion&quot;);   \/\/ &lt;=      ....      for (Card card : playerB.getGraveyard().getCards(currentGame)) {         if (card.isCreature()) {             Assert.assertEquals(card.getName() + &quot; should not have ORC type&quot;,                     false, card.getSubtype(currentGame).contains(SubType.ORC));             Assert.assertEquals(card.getName() + &quot; should have CAT type&quot;,                     true, card.getSubtype(currentGame).contains(SubType.CAT));         }     } }<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432, \u0447\u0442\u043e \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0431\u0435\u0441\u0446\u0435\u043d\u0438\u0442\u044c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0434\u0435\u0444\u0435\u043a\u0442, \u043f\u043e\u0434\u0443\u043c\u0430\u0432: &quot;\u041d\u0443\u0443\u0443, \u044d\u0442\u043e \u0436\u0435 \u0442\u0435\u0435\u0441\u0442\u044b&quot;. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u044f \u0441 \u0432\u0430\u043c\u0438 \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d. \u0412\u0435\u0434\u044c \u0442\u0435\u0441\u0442\u044b \u0438\u0433\u0440\u0430\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0430\u0436\u043d\u0443\u044e \u0440\u043e\u043b\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 (\u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u0443\u044e, \u043a\u0430\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435), \u0438 \u043f\u0440\u0438 \u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0435\u0444\u0435\u043a\u0442\u0430 \u0432 \u0440\u0435\u043b\u0438\u0437\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0442\u044b\u043a\u0430\u0442\u044c \u043f\u0430\u043b\u044c\u0446\u0430\u043c\u0438 \u043d\u0430 \u0442\u0435\u0441\u0442\u044b\/\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u0432. \u0422\u0430\u043a \u0432\u043e\u0442, \u0434\u0435\u0444\u0435\u043a\u0442\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0435\u0441\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u044b. \u0417\u0430\u0447\u0435\u043c \u0442\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0443\u0436\u043d\u044b? \u0417\u0430\u0447\u0435\u043c \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043d\u0430 \u043d\u0438\u0445?<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 <i>testArcaneAdaptationGiveType()<\/i> \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0443 &quot;Arcane Adaptation&quot;. \u041a\u0430\u0436\u0434\u043e\u043c\u0443 \u0438\u0433\u0440\u043e\u043a\u0443 \u0440\u0430\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u044b \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u0437\u043e\u043d\u0443. \u0418 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f copy-paste \u0432 \u0438\u0433\u0440\u043e\u0432\u0443\u044e \u0437\u043e\u043d\u0443 &quot;\u041a\u043b\u0430\u0434\u0431\u0438\u0449\u0435&quot; \u0438\u0433\u0440\u043e\u043a\u0443 <i>player\u0410<\/i> \u043f\u043e\u043f\u0430\u043b\u0438 2 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 &quot;Silvercoat Lion&quot;, \u0430 \u0438\u0433\u0440\u043e\u043a\u0443 <i>playerB<\/i> \u0442\u0430\u043a \u043d\u0438\u0447\u0435\u0433\u043e \u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u0414\u0430\u043b\u0435\u0435 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043c\u0430\u0433\u0438\u044f \u0438 \u0441\u0430\u043c\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e &quot;\u043a\u043b\u0430\u0434\u0431\u0438\u0449\u0430&quot; \u0438\u0433\u0440\u043e\u043a\u0430 <i>playerB<\/i> \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0440\u043e\u0437\u044b\u0433\u0440\u044b\u0448\u0435, \u0442\u043e \u0432 \u0446\u0438\u043a\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0430 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442, \u0432\u0435\u0434\u044c \u0432 &quot;\u043a\u043b\u0430\u0434\u0431\u0438\u0449\u0435&quot; \u043d\u0438\u0447\u0435\u0433\u043e \u0438 \u043d\u0435 \u0431\u044b\u043b\u043e. \u042d\u0442\u043e \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b \u0441\u0442\u0430\u0440\u044b\u043c \u0434\u043e\u0431\u0440\u044b\u043c <i>System.out.println()<\/i> \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0442\u0435\u0441\u0442\u0430<i>.<\/i><\/p>\n<p>  \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 copy-paste:<\/p>\n<pre><code class=\"java\">.... addCard(Zone.HAND, playerA, &quot;Silvercoat Lion&quot;); addCard(Zone.BATTLEFIELD, playerA, &quot;Silvercoat Lion&quot;); addCard(Zone.GRAVEYARD, playerA, &quot;Silvercoat Lion&quot;);   \/\/ &lt;=  addCard(Zone.HAND, playerB, &quot;Silvercoat Lion&quot;); addCard(Zone.BATTLEFIELD, playerB, &quot;Silvercoat Lion&quot;); addCard(Zone.GRAVEYARD, playerB, &quot;Silvercoat Lion&quot;);   \/\/ &lt;= ....<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u044f \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u0434, \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432 \u0432 \u043a\u043b\u0430\u0434\u0431\u0438\u0449\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 <i>playerB<\/i> \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0410\u0432\u0435, <i>System.out.println()<\/i>!<\/p>\n<p>  \u0422\u0435\u0441\u0442 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0437\u0435\u043b\u0435\u043d\u044b\u0439 \u0438 \u0434\u043e, \u0438 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0432\u0435\u0437\u0435\u043d\u0438\u0435\u043c. \u041d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u043f\u0440\u0430\u0432\u043e\u043a, \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445 \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0442\u0430\u043a\u043e\u0439 \u0442\u0435\u0441\u0442 \u043e\u043a\u0430\u0436\u0435\u0442 \u0432\u0430\u043c \u043c\u0435\u0434\u0432\u0435\u0436\u044c\u044e \u0443\u0441\u043b\u0443\u0433\u0443, \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044f \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a. <\/p>\n<p>  \u0422\u0430\u043a\u043e\u0439 \u0436\u0435 copy-paste \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445:<\/p>\n<ul>\n<li>V6072 Two similar code fragments were found. Perhaps, this is a typo and &#39;playerB&#39; variable should be used instead of &#39;playerA&#39;. PaintersServantTest.java(33), PaintersServantTest.java(29), PaintersServantTest.java(27), PaintersServantTest.java(31)<\/li>\n<li>V6072 Two similar code fragments were found. Perhaps, this is a typo and &#39;playerB&#39; variable should be used instead of &#39;playerA&#39;. SubTypeChangingEffectsTest.java(32), SubTypeChangingEffectsTest.java(28), SubTypeChangingEffectsTest.java(26), SubTypeChangingEffectsTest.java(30)<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 N11<\/h2>\n<p>  <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6086\/\">V6086<\/a> Suspicious code formatting. &#39;else&#39; keyword is probably missing. DeckImporter.java(23)<\/p>\n<pre><code class=\"java\">public static DeckImporter getDeckImporter(String file) {   if (file == null) {     return null;   } if (file.toLowerCase(Locale.ENGLISH).endsWith(&quot;dec&quot;)) {   \/\/ &lt;=     return new DecDeckImporter();   } else if (file.toLowerCase(Locale.ENGLISH).endsWith(&quot;mwdeck&quot;)) {     return new MWSDeckImporter();   } else if (file.toLowerCase(Locale.ENGLISH).endsWith(&quot;txt&quot;)) {     return new TxtDeckImporter(haveSideboardSection(file));   }   ....   else {     return null;   } }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e <a href=\"https:\/\/www.viva64.com\/ru\/w\/v6086\/\">V6086<\/a> \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 <i>if-else-if<\/i>, \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0449\u0435\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a <i>else<\/i>.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u044d\u0442\u043e \u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437-\u0437\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <i>return null <\/i>\u043d\u0435\u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0438 \u043a \u0447\u0435\u043c\u0443 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043a\u0440\u0443\u0442\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430 \u0440\u0430\u0437 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f. <\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a <i>else<\/i> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e:<\/p>\n<pre><code class=\"java\">public SomeType smtMethod(SomeType obj) {   ....   if (obj == null) {     obj = getNewObject();   } if (obj.isSomeObject()) {     \/\/ some logic   } else if (obj.isOtherSomething()) {     obj = calulateNewObject(obj);     \/\/ some logic   }    ....   else {     \/\/ some logic   }   return obj; }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 <i>obj == null<\/i>, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 <i>else<\/i> \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u043d\u043e\u0432\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u0447\u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 <i>if-else-if<\/i>, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430. <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 XMage \u2013 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432. \u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043d\u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0442\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u041f\u041e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0418 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u043b\u0438\u0437\u043e\u0432, \u0442\u0435\u0441\u0442\u043e\u0432, \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439: \u0431\u0430\u0433 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0439\u0434\u0435\u0442 \u043b\u0430\u0437\u0435\u0435\u0447\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0430\u0448\u0443 \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u043e\u0431\u0437\u0430\u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u0431\u0430\u0440\u044c\u0435\u0440\u043e\u043c \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0437\u0430\u0449\u0438\u0442\u044b?<\/p>\n<p>  \u041a\u0430\u043a \u0432\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 PVS-Studio Java). \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043a\u0430\u043a \u044f\u0432\u043d\u043e\u0439 \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0430\u043a \u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u0443\u0432\u044b, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f). \u041d\u0443\u0436\u043d\u043e \u043a \u043d\u0438\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c \u0438 \u0431\u0435\u0437 \u0441\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 <a href=\"https:\/\/www.viva64.com\/ru\/about-feedback\/\">\u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f<\/a>, \u0430 \u043f\u043e\u043a\u0430 \u043b\u043e\u0436\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0436\u0434\u0443\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 <a href=\"https:\/\/www.viva64.com\/ru\/m\/0044\/\">\u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432<\/a> \u043f\u043e\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439. <\/p>\n<p>  \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043b\u0438\u0447\u043d\u043e &quot;\u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c&quot; \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, <a href=\"https:\/\/www.viva64.com\/ru\/pvs-studio-download\/\">\u0441\u043a\u0430\u0447\u0430\u0432<\/a> \u0435\u0433\u043e \u0441 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0430\u0439\u0442\u0430. <\/p>\n<p>  <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/516974\/\"><\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/898\/3b6\/5a7\/8983b65a74adb29a2113eba12fbec3f1.png\"><\/div>\n<p><\/a><br \/>  \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: Maxim Stefanov. <a href=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/516974\/\">Checking the Code of XMage, and Why You Won&#39;t Be Able to Get the Special Rare Cards of the Dragon&#39;s Maze Collection<\/a>.<\/div>\n<p> \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\/company\/pvs-studio\/blog\/516980\/\"> https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/516980\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pvs-studio\/blog\/516980\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ab5\/41b\/2b4\/ab541b2b4f379f0af908f736888b87f2.png\" alt=\"image1.png\"><\/div>\n<p>  XMage \u2014 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0438\u0433\u0440\u044b \u0432 Magic: The Gathering (MTG). XMage \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 2010 \u0433\u043e\u0434\u0430. \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0431\u044b\u043b\u043e \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043e 182 \u0440\u0435\u043b\u0438\u0437\u0430, \u043d\u0430\u0431\u0440\u0430\u043b\u0430\u0441\u044c \u0446\u0435\u043b\u0430\u044f \u0430\u0440\u043c\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u0432, \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0432\u043e\u0434 \u043f\u043e\u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u043c \u0432 \u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438! \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0435\u0434\u0438\u043d\u043e\u0440\u043e\u0433 \u0438\u0437 PVS-Studio \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 XMage, \u0438 \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442, \u043c\u043e\u0436\u0435\u0442 \u0438 \u0441\u0445\u043b\u0435\u0441\u0442\u043d\u0435\u0442\u0441\u044f \u0441 \u043a\u0435\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u0431\u043e\u044e.  <\/p>\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-309148","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/309148","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=309148"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/309148\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=309148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=309148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=309148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}