
PVS-Studio рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ C, C ++ рдФрд░ C # рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рддреНрддреАрдп рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХреБрдЫ рдЧреНрд░рд╛рд╣рдХ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдФрд░ рдЖрдИрдмреАрдПрдо рдЖрд░рдкреАрдЬреА (!) рдЕрдм рд╡рд╣рд╛рдВ рдорд╛рдВрдЧ рдореЗрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рд╣рдореЗрд╢рд╛ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд░реАрдм рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рдЗрд╕рд▓рд┐рдП, рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдПрдХ рдЬрд╛рд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдкрд░рд┐рдЪрдп
рдмреЗрд╢рдХ, рдЪрд┐рдВрддрд╛рдПрдБ рдереАрдВред рдЖрдИрдмреАрдПрдо рдЖрд░рдкреАрдЬреА рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрд╛рдЬрд╛рд░ рдХреЛ рд▓реЗрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╕рд╛рдзрди рд╣реИрдВред рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рдореЗрдВ, рдЪреАрдЬреЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ, рдФрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд╢рд╛рдВрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдлрд┐рд░ рднреА, рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛ рдХреЗ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЬрд╛рд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕реА ++ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдкреВрд░реА рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдерд╛ред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдмрд╛рддреЗрдВ рдкрд╣рд▓реЗред
рд▓рдХрдбрд╝реА
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рддрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рд╣рдо рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡реГрдХреНрд╖ рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдореЙрдбрд▓ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдореВрд▓ рддрддреНрд╡ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЪреЗрдХ рдХрд░рддреЗ рд╕рдордп, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдиреЛрдбреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рдмрд┐рдирд╛, рдЧрдВрднреАрд░ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ
рдЕрдкреНрд░рдорд╛рдгрд┐рдд рд╣реИ ред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдмрд╕ рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡реГрдХреНрд╖ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЕрд░реНрде рд╕рдВрдмрдВрдзреА рдЬрд╛рдирдХрд╛рд░реА рднреА рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреЗрдбрд╝ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛, рдЪрд░ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрджрд┐ред
рд╣рдордиреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдФрд░ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА:
рд╣рдордиреЗ рд▓рдЧрднрдЧ рддреБрд░рдВрдд ANTLR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рддреНрдпрд╛рдЧ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░реЗрдЧрд╛ (рд╢рдмреНрджрд╛рд░реНрде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЕрдкрдиреЗ рджрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛)ред рдЕрдВрдд рдореЗрдВ, рд╣рдордиреЗ рдЪрдореНрдордЪ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд░реБрдХрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:
- рдпрд╣ рди рдХреЗрд╡рд▓ рдПрдХ рдкрд╛рд░реНрд╕рд░ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╣реИ - рдпрд╣ рди рдХреЗрд╡рд▓ рдПрдХ рдкрд╛рд░реНрд╕ рдЯреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрд░реНрде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рднреА рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдкрдХреЛ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЪрд░ рдШреЛрд╖рдгрд╛ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
- рдпрд╣ рдЧреНрд░рд╣рдг JDT рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
- рдпрд╣ рдЬрд╛рд╡рд╛ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЕрдЪреНрдЫрд╛ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рд╕реНрдкрд╖реНрдЯ рдПрдкреАрдЖрдИред
рдпрд╣рд╛рдВ рдПрдХ рдореЗрдЯрд╛рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдЪрдореНрдордЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╣рдо рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рдмрдирд╛рддреЗ рд╕рдордп рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
рдпрд╣ рдореЗрдЯрд╛рдореЙрдбрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ:
class TestClass { void test(int a, int b) { int x = (a + b) * 4; System.out.println(x); } }
рдЪрдореНрдордЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЯреНрд░реА (рдиреЛрдбреНрд╕ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдЬреЛрдбрд╝рдирд╛) рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдореВрд▓ рдХреЗ рд╕рд░рд▓реАрдХреГрдд рдореЗрдЯрд╛рдореЛрдбреЗрд▓ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рд╕рдорддреБрд▓реНрдп рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐ рд╣рдореЗрдВ рдЕрдм рдХрд┐рд╕реА рдкреЗрдбрд╝ рдкрд░ рдЪрдврд╝рддреЗ рд╕рдордп рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрд╖реНрдардХ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдпрд╛рдд рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕рдорд╛рди рд╕рд░рд▓реАрдХрд░рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЛрдб рдЗрд╕ рддрд░рд╣:
for (int i = ((0)); (i < 10); i++) if (cond) return (((42)));
рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
for (int i = 0; i < 10; i++) { if (cond) { return 42; } }
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рддрдерд╛рдХрдерд┐рдд рдкреИрдЯрд░реНрди-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рд╣реИ рдЬреЛ рдХрд┐ рдкреНрд░рд╕рд┐рджреНрдз рддреНрд░реБрдЯрд┐ рдХреЛрдб рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рджрд╛рди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред рдРрд╕реЗ рдкреИрдЯрд░реНрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдбрд╝реА рд╣реИ рдФрд░ рдЙрдирдХреА рдЬрдЯрд┐рд▓рддрд╛ рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИред
рдкреИрдЯрд░реНрди-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреНрд╡рд╛рд░рд╛ рдкрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг jMonkeyEngine рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдирд┐рдореНрди рдХреЛрдб рд╣реИ:
if (p.isConnected()) { log.log(Level.FINE, "Connection closed:{0}.", p); } else { log.log(Level.FINE, "Connection closed:{0}.", p); }
рдпрджрд┐ рдХрдерди рдХрд╛
рддрддреНрдХрд╛рд▓реАрди рдФрд░
рдЕрдиреНрдп рдЦрдВрдб рд╕рдорд╛рди рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИред
рдпрд╣рд╛рдБ рд╣рд╛рдЗрд╡ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдПрдХ рдФрд░ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рд╣реИ:
if (obj instanceof Number) {
рдЗрд╕ рдХреЛрдб рдореЗрдВ рдкреНрд░рдкрддреНрд░ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рджреЛ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рд╣реИрдВ
рдпрджрд┐ (....) рдФрд░ рдпрджрд┐ (....) рдЕрдиреНрдп (рдпрджрд┐) ред рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдЗрд╕ рдЦрдВрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдпрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдФрд░ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдореЙрдбрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ
рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрдкрдХреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдкрд░ рдЪрд░ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░, рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдвреВрдВрдвреЗрдВред рд╣рдо рдЗрди рдорд╛рдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рд╡реИрд▓реНрдпреВ рдХрд╣рддреЗ рд╣реИрдВред
рд╡рд░реНрдЪреБрдЕрд▓ рд╡реИрд▓реНрдпреВрдЬрд╝ рдХреЛ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдкрд░ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕, рдХреНрд▓рд╛рд╕ рдлреАрд▓реНрдбреНрд╕, рдореЗрдердб рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рддрдВрддреНрд░ рд╕рд╣реА рдкрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓ рд╡реИрд▓реНрдпреВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЗ рд▓рд┐рдП рд╡реИрд▓реНрдпреВрдЬрд╝ рдХреА рдкреВрд░реА рд╡реИрдз рд╕реАрдорд╛ рдХреЛ рд╡рд░реНрдЪреБрдЕрд▓ рд╡реИрд▓реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
void func(byte x)
рд╣рд░ рдмрд╛рд░ рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рд╡рд░реНрдЪреБрдЕрд▓ рдорд╛рди рдХреЛ рдкреБрди: рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
void func() { int x = 5;
рдбреЗрдЯрд╛ рдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдирд┐рдпрдВрддреНрд░рдг рдХрдердиреЛрдВ рдХреЛ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:
void func(int x)
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп, рдЪрд░
x рдХреЗ рдорд╛рдиреЛрдВ рдХреА рд╕реАрдорд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ (-2147483648 рд╕реЗ 2147483647 рддрдХ) рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдкрд╣рд▓рд╛ рд╕рд╢рд░реНрдд рдмреНрд▓реЙрдХ рдПрдХ рдмрд╛рдзрд╛
x > 3 рд▓рдЧрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реАрдорд╛рдПрдВ рд╕рдВрдпреБрдХреНрдд рд╣реЛрддреА рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк,
рддрддреНрдХрд╛рд▓реАрди рдмреНрд▓реЙрдХ рдореЗрдВ
x рдХреЗ рд▓рд┐рдП рдорд╛рдиреЛрдВ рдХреА рд╢реНрд░реЗрдгреА 4 рд╕реЗ 2147483647 рддрдХ рд╣реИ, рдФрд░
рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдореЗрдВ -2147483648 рд╕реЗ 3. рддрдХ рд╣реИред рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐
x <10 рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг:
void f1(int a, int b, int c) { a = c; b = c; if (a == b)
рдпрд╣рд╛рдВ, рд╡реЗрд░рд┐рдПрдмрд▓
a рдХреЛ рд╡реИрд▓реНрдпреВ
c рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ , рд╡реЗрд░рд┐рдПрдмрд▓
b рдХреЛ рд╡реИрд▓реНрдпреВ
c рднреА рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж
a рдФрд░
b рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рджрд╛рд╣рд┐рдиреА рдУрд░ рдХреА рд▓рдХрдбрд╝реА рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВред
рдпрд╣рд╛рдБ рд╡рд░реНрдг рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
void f2(int a, int b, int c) { if (a < b) { if (b < c) { if (c < a)
рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ рдЕрд╕рдорд╛рдирддрд╛рдУрдВ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рддрдВрддреНрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкреИрдЯрд░реНрди-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣;
- рд╕рд░рдгреА рдореЗрдВ рд╡рд┐рджреЗрд╢ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ;
- рдЕрд╢рдХреНрдд рдпрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╣реБрдВрдЪ;
- рдЕрд░реНрдерд╣реАрди рд╕реНрдерд┐рддрд┐рдпрд╛рдВ (рд╣рдореЗрд╢рд╛ рд╕рдЪ / рдЭреВрда);
- рдореЗрдореЛрд░реА рдФрд░ рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ;
- рд╡рд┐рднрд╛рдЬрди 0 рд╕реЗ;
- рдФрд░ рдХреБрдЫ рдЕрдиреНрдпред
рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЗрдирдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реЗрд╡рд╛ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд░рдиреЗ, рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХреБрдЫ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдУрд╡рд░рдлреНрд▓реЛ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SQL рдЗрдВрдЬреЗрдХреНрд╢рдиред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдЪрд░ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рддрдВрддреНрд░ рдПрдХ рдЬрдЯрд┐рд▓ рдФрд░ рд╡реНрдпрд╛рдкрдХ рддрдВрддреНрд░ рд╣реИ, рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдмрд╣реБрдд рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЛ рдЫреБрдЖ рд╣реИред
рдЖрдЗрдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЫрддреНрддрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛:
public static boolean equal(byte[] arg1, final int start1, final int len1, byte[] arg2, final int start2, final int len2) { if (len1 != len2) {
рд╕реНрдерд┐рддрд┐
len1 == len2 рд╣рдореЗрд╢рд╛ рд╕рдВрддреБрд╖реНрдЯ рд░рд╣рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдкрд░реАрдд рдЬрд╛рдБрдЪ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИред
рдЙрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:
if (instances != null) {
рдпрд╣рд╛рдВ,
рджреВрд╕рд░реЗ рдмреНрд▓реЙрдХ рдореЗрдВ, рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдХреА рдбреЗрд░реЗрдлреНрд░реЗрдВрд╕рд┐рдВрдЧ рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИред рдиреЛрдЯ: рдпрд╣рд╛рдБ
рдЙрджрд╛рд╣рд░рдг рдЗрд╕.
instances рдХреЗ рд╕рдорд╛рди рд╣реИрдВред
JMonkeyEngine рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЙрджрд╛рд╣рд░рдг:
public static int convertNewtKey(short key) { .... if (key >= 0x10000) { return key - 0x10000; } return 0; }
рдпрд╣рд╛рдВ
рдХреБрдВрдЬреА рдЪрд░ рдХреА рддреБрд▓рдирд╛ рд╕рдВрдЦреНрдпрд╛ 65536 рдХреЗ рд╕рд╛рде рдХреА рдЧрдИ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЯрд╛рдЗрдк
рд╢реЙрд░реНрдЯ рдХрд╛ рд╣реИ , рдФрд░
рд╢реЙрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдореВрд▓реНрдп 32767 рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╢рд░реНрдд рдХрднреА рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЬреЗрдирдХрд┐рдВрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
public final R getSomeBuildWithWorkspace() { int cnt = 0; for (R b = getLastBuild(); cnt < 5 && b ! = null; b = b.getPreviousBuild()) { FilePath ws = b.getWorkspace(); if (ws != null) return b; } return null; }
рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд╛рдБрдЪ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
cnt рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрдврд╝рд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЪреЗрдХ рдмреЗрдХрд╛рд░ рд╣реИред
рдПрдиреЛрдЯреЗрд╢рди рддрдВрддреНрд░
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдПрдиреЛрдЯреЗрд╢рди рддрдВрддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдиреЛрдЯреЗрд╢рди рдПрдХ рдорд╛рд░реНрдХрдЕрдк рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдЙрдирдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореИрдиреБрдЕрд▓ рдЕрдВрдХрди рдПрдХ рд▓рдВрдмреА рдФрд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдорд╛рдирдХ рдЬрд╛рд╡рд╛ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдорд╛рдирдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдЬреНрдЮрд╛рди рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
int test(int a, int b) { ... return Math.max(a, a); }
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЯрд╛рдЗрдкреЛ рдХреЗ рдХрд╛рд░рдг, рдЙрд╕реА рдЪрд░ рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ
Math.max рд╡рд┐рдзрд┐ рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдРрд╕реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд┐рд░рд░реНрдердХ рдФрд░ рд╕рдВрджреЗрд╣рд╛рд╕реНрдкрдж рд╣реИред
рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐
рдореИрдердореИрдХреНрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рддрд░реНрдХ рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░ рд╕рдХреЗрдВрдЧреЗред
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рддрд░реАрдХреЛрдВ (C ++ рдХреЛрдб) рдХреЗ рд╣рдорд╛рд░реЗ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛:
Class("java.lang.Math") - Function("abs", Type::Int32) .Pure() .Set(FunctionClassification::NoDiscard) .Returns(Arg1, [](const Int &v) { return v.Abs(); }) - Function("max", Type::Int32, Type::Int32) .Pure() .Set(FunctionClassification::NoDiscard) .Requires(NotEquals(Arg1, Arg2) .Returns(Arg1, Arg2, [](const Int &v1, const Int &v2) { return v1.Max(v2); }) Class("java.lang.String", TypeClassification::String) - Function("split", Type::Pointer) .Pure() .Set(FunctionClassification::NoDiscard) .Requires(NotNull(Arg1)) .Returns(Ptr(NotNullPointer)) Class("java.lang.Object") - Function("equals", Type::Pointer) .Pure() .Set(FunctionClassification::NoDiscard) .Requires(NotEquals(This, Arg1)) Class("java.lang.System") - Function("exit", Type::Int32) .Set(FunctionClassification::NoReturn)
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
- рд╡рд░реНрдЧ - рдПрдиреЛрдЯреЗрдЯ рд╡рд░реНрдЧ;
- рд╕рдорд╛рд░реЛрд╣ - рдПрдиреЛрдЯреЗрдЯ рд╡рд░реНрдЧ рдХреА рд╡рд┐рдзрд┐;
- рд╢реБрджреНрдз - рдПрдиреЛрдЯреЗрд╢рди рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рд╕рд╛рдл рд╣реИ, рдЕрд░реНрдерд╛рддред рдирд┐рдпрддрд╛рддреНрдордХ рдФрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд┐рдирд╛;
- рд╕реЗрдЯ - рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдирд╛ред
- FunctionClassification :: NoDiscard - рдПрдХ рдзреНрд╡рдЬ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдлрдВрдХреНрд╢рдирдХреНрд▓рд╛рд╕рд┐рдлрд┐рдХреЗрд╢рди :: NoReturn - рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ;
- Arg1 , Arg2 , ... , ArgN - рд╡рд┐рдзрд┐ рдХреЗ рддрд░реНрдХ;
- рд░рд┐рдЯрд░реНрди - рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп;
- рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдмрдВрдзред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореИрдиреБрдЕрд▓ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ - рдмрд╛рдЗрдЯ рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрдмрдВрдзреЛрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЖрдЙрдЯрдкреБрдЯред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рднреА рдЖрд╢реНрд░рд┐рддреЛрдВ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдЬреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдП рдЧрдП рдереЗред
рд╡реИрд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЙрдкрдХрд░рдг рдореМрдЬреВрдж рд╣реИ рдЬреЛ
@Nullable ,
NotNull рдЬреИрд╕реЗ
рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдЗрдЯрдХреЛрдб -
FABA рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, IntelliJ IDEA рдореЗрдВ FABA рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рд╣рдо рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯрдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдЕрдиреБрдмрдВрдз рд╣рдорд╛рд░реЗ рдореИрдиреБрдЕрд▓ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреВрд░рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рдо рдкрд░ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рдЕрдХреНрд╕рд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВред рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдиреЛрдЯреЗрд╢рди рдбреЗрдЯрд╛ рдлреНрд▓реЛ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
java.lang.Math.abs рдкрджреНрдзрддрд┐ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдп рдХреА рд╕рд╣реА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рдЖрдкрдХреЛ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ - рдмрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВред
рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
public boolean equals(Object other) { if (other instanceof Id) { Id that = (Id) other; return purchaseSequence.equals(this.purchaseSequence) && that.purchaseNumber == this.purchaseNumber; } else { return false; } }
рдЗрд╕ рдХреЛрдб рдореЗрдВ,
рдмрд░рд╛рдмрд░реА () рд╡рд┐рдзрд┐
рдЦрд░реАрдж рдХреА рддреБрд▓рдирд╛ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рд╣реА рдХрд░рддреА рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреИрд╕реЗ рдбреЙред рдлреНрд░реЗрдВрдХрд╕реНрдЯреАрди рднрд╛рдЧреЛрдВ рд╕реЗ рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рддрд░рд╣

рдЪреВрдВрдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рддрдВрддреНрд░ рд╕реНрд╡рдпрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рднрд╛рд╖рд╛ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрдВрдзреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рд╕реА ++ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реЗ рдЗрди рддрдВрддреНрд░реЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЬрд╛рд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ C ++ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛрд░ рдХреА рд╕рднреА рд╢рдХреНрддрд┐ рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓реАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдирд┐рд░реНрдгрдп рдЗрд╕ рддрдереНрдп рд╕реЗ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдерд╛ рдХрд┐ рдЗрди рддрдВрддреНрд░реЛрдВ рдХреЛ рдЖрдзреБрдирд┐рдХ рд╕реА ++ рдореЗрдВ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореИрдЬрд┐рдХ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред
рдЬрд╛рд╡рд╛ рднрд╛рдЧ рдХреЛ C ++ рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ
SWIG (рд╕рд░рд▓реАрдХреГрдд рдЖрд╡рд░рдг рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЗрдирд░реЗрдЯрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ - рд╕реА рдФрд░ рд╕реА ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░реИрдкрд░ рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдЙрдкрдХрд░рдгред рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП, SWIG
рдЬреЗрдПрдирдЖрдИ (рдЬрд╛рд╡рд╛ рдиреЗрдЯрд┐рд╡ рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
SWIG рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА C ++ рдХреЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореИрдВ SWIG рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ C ++ рдХреНрд▓рд╛рд╕ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
CoolClass.h
class CoolClass { public: int val; CoolClass(int val); void printMe(); };
CoolClass.cpp
#include <iostream> #include "CoolClass.h" CoolClass::CoolClass(int v) : val(v) {} void CoolClass::printMe() { std::cout << "val: " << val << '\n'; }
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╕рднреА рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ
SWIG рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреА, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЬрд╛рддреА рд╣реИрдВред
Example.i
%module MyModule %{ #include "CoolClass.h" %} %include "CoolClass.h"
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк SWIG рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
$ swig -c++ -java Example.i
рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:
- CoolClass.java - рдПрдХ рд╡рд░реНрдЧ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╕реАрдзреЗ рдЬрд╛рд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ;
- MyModule.java - рдПрдХ рдореЙрдбреНрдпреВрд▓ рд╡рд░реНрдЧ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдореБрдлреНрдд рдХрд╛рд░реНрдп рдФрд░ рдЪрд░ рд░рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ;
- MyModuleJNI.java - рдЬрд╛рд╡рд╛ рд░реИрдкрд░;
- Example_wrap.cxx - C ++ рд░реИрдкрд░ред
рдЕрдм рдЖрдкрдХреЛ рдкрд░рд┐рдгрд╛рдореА .java рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ Java рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдФрд░ .cxx рдлрд╝рд╛рдЗрд▓ рдХреЛ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ
System.loadLibary () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреА
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :
App.java
class App { static { System.loadLibary("example"); } public static void main(String[] args) { CoolClass obj = new CoolClass(42); obj.printMe(); } }
рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ, рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдмреЗрд╢рдХ, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- C ++ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ % рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рд╕реНрд╡реАрдХреГрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛ рднрд╛рдЧ рдореЗрдВ C ++ рднрд╛рдЧ рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, SWIG C ++ рд╕реЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдХрдбрд╝рддрд╛ рд╣реИ (segfault рд╣реЛрддрд╛ рд╣реИ), рд╣рд╛рд▓рд╛рдВрдХрд┐, % рдЕрдкрд╡рд╛рдж рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ;
- SWIG % рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛ рдХреА рдУрд░ рд╕реЗ рдкреНрд▓рд╕ рдХреЛрдб рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдо рдЖрднрд╛рд╕реА рдореВрд▓реНрдпреЛрдВ рдореЗрдВ toString () рдкрджреНрдзрддрд┐ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛ рдбреАрдмрдЧрд░ рдореЗрдВ рджреЗрдЦ рд╕рдХреЗрдВ;
- C ++ рд╕реЗ RAII рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, AutoClosable Interface рдХреЛ рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╣рд┐рдд рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
- рдирд┐рд░реНрджреЗрд╢рдХ рддрдВрддреНрд░ рдХреНрд░реЙрд╕-рднрд╛рд╖рд╛ рдмрд╣реБрд░реВрдкрддрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ;
- рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ C ++ (рдЙрдирдХреЗ рдореЗрдореЛрд░реА рдкреВрд▓ рдкрд░) рдХреЗ рдЕрдВрджрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдлрд╛рдЗрдирд▓рд░реНрд╕ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░реЗрдЧрд╛ред
рдЖрдк
SWIG рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЗрди рд╕рднреА рддрдВрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдорд╛рд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЧреНрд░реЗрдбреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд╕реАрдПрдордХреЗ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, SWIG рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ C ++ рднрд╛рдЧ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд▓рдЧрднрдЧ рдЕрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдЕрд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ C ++ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдХреЛрд░ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдореИрдХрдУрдПрд╕ рдХреЗ рддрд╣рдд рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрд╛рд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рднреА рдЗрди рдУрдПрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рдХреНрдпрд╛ рд╣реИ?
рдирд┐рджрд╛рди рдЦреБрдж рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдпрд╣ рдЪрдореНрдордЪ рдХреЗ рд╕рд╛рде рдШрдирд┐рд╖реНрда рдмрд╛рддрдЪреАрдд рдХреЗ рдХрд╛рд░рдг рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдирд┐рдпрдо рдПрдХ рдЖрдЧрдВрддреБрдХ рд╣реИ, рдЬрд┐рд╕рдХреЗ рддрд░реАрдХреЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, V6004 рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдврд╛рдВрдЪрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
class V6004 extends PvsStudioRule { .... @Override public void visitCtIf(CtIf ifElement) {
рдкреНрд▓рдЧ-рдЗрди
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдорд╛рд╡реЗрди рдФрд░ рдЧреНрд░реИрдбрд▓ рдЕрд╕реЗрдВрдмрд▓реА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред
рдЧреНрд░реЗрдбреЗрд▓ рдХреЗ рд▓рд┐рдП:
.... apply plugin: com.pvsstudio.PvsStudioGradlePlugin pvsstudio { outputFile = 'path/to/output.json' .... }
рдорд╛рд╡реЗрди рдХреЗ рд▓рд┐рдП:
.... <plugin> <groupId>com.pvsstudio</groupId> <artifactId>pvsstudio-maven-plugin</artifactId> <version>0.1</version> <configuration> <analyzer> <outputFile>path/to/output.json</outputFile> .... </analyzer> </configuration> </plugin>
рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд▓рдЧрдЗрди рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ IntelliJ IDEA рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдпрд╣ рдкреНрд▓рдЧрдЗрди рдПрдВрдбреНрд░реЙрдЗрдб рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИред
рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рд╣рдордиреЗ рдПрдХ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЛрдб рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЬрд┐рддрдиреА рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЪрд▓рд╛ рд╕рдХреЗрдВрдЧреЗред
рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдХрдИ рдЪрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдЪрдореНрдордЪ рдореЗрдЯрд╛рдореЛрдбреЗрд▓ рдХреИрд╢рд┐рдВрдЧ;
- рдореЗрдЯрд╛рдореЛрдбреЗрд▓ рдХреЗ рдмрджрд▓реЗ рд╣реБрдП рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг;
- рдмрджрд▓реА рд╣реБрдИ рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгред
рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЬрд╛рд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреВрд▓рдХрд┐рдЯ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЦреБрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ ^ рдбрдмреНрд▓реНрдпреВ рдкрд╛рдпрдерди + рдЯрд┐рдВрдХрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИред
рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ GitHub рдкрд░ рднрдВрдбрд╛рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рддреА рд╣реИ;
- рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ;
- рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ pom.xml рдпрд╛ build.gradle (git apply рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ;
- рдкрд░рд┐рдгрд╛рдореА рд░рд┐рдкреЛрд░реНрдЯ рдХреА рддреБрд▓рдирд╛ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рдХреА рдЧрдИ рд╣реИред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдЪреНрдЫреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдирд╣реАрдВ рдЦреЛрдИ рдЧрдИ рд╣реИрдВред рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИред
рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдЬрд┐рдирдореЗрдВ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдВрддрд░ рд╣реИ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рд▓ рд░рдВрдЧ рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдиреБрдореЛрджрди рдмрдЯрди рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рддреНрд░реБрдЯрд┐ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдкрд░рдВрдкрд░рд╛ рд╕реЗ, рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдЦреБрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рд╕реЗ рдХрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреВрдВрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдЬрд╛рд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдкрд╛рдпрд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред
рд╣рд╛рдЗрдмрд░рдиреЗрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6009 рдлрд╝рдВрдХреНрд╢рди 'рдмрд░рд╛рдмрд░' рдХреЛ рд╡рд┐рд╖рдо рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рддрд░реНрдХреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ: рдпрд╣, 1. рдкрд░реНрдЪреЗрдЬрдХрд╛рд░реНрдб.рдЬрд╡рд╛ 57
public boolean equals(Object other) { if (other instanceof Id) { Id that = (Id) other; return purchaseSequence.equals(this.purchaseSequence) && that.purchaseNumber == this.purchaseNumber; } else { return false; } }
рдЗрд╕ рдХреЛрдб рдореЗрдВ,
рдмрд░рд╛рдмрд░реА () рд╡рд┐рдзрд┐
рдЦрд░реАрдж рдХреА рддреБрд▓рдирд╛ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рд╣реА рдХрд░рддреА рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6009 рдлрд╝рдВрдХреНрд╢рди 'рдмрд░рд╛рдмрд░' рдХреЛ рд╡рд┐рд╖рдо рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред рддрд░реНрдХреЛрдВ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ: рдпрд╣, 1. ListHashcodeChangeTest.java 232
public void removeBook(String title) { for( Iterator<Book> it = books.iterator(); it.hasNext(); ) { Book book = it.next(); if ( title.equals( title ) ) { it.remove(); } } }
рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рдПрдХ
рдСрдкрд░реЗрд╢рди - рджрд╛рдИрдВ рдУрд░
book.title рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП,
рд╢реАрд░реНрд╖рдХ рдирд╣реАрдВред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣рд╛рдЗрд╡
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА
: V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'colOrScalar1.equals ("рдХреЙрд▓рдо")' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред GenVectorCode.java 2768
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА
: V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'colOrScalar1.equals ("рд╕реНрдХреЗрд▓рд░")' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред GenVectorCode.java 2774
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА
: V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'colOrScalar1.equals ("рдХреЙрд▓рдо")' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред GenVectorCode.java 2785
String colOrScalar1 = tdesc[4]; .... if (colOrScalar1.equals("Col") && colOrScalar1.equals("Column")) { .... } else if (colOrScalar1.equals("Col") && colOrScalar1.equals("Scalar")) { .... } else if (colOrScalar1.equals("Scalar") && colOrScalar1.equals("Column")) { .... }
рд╕рдВрдЪрд╛рд▓рдХ рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп '
||' '
&&' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
JavaParser рдкреНрд░реЛрдЬреЗрдХреНрдЯ
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА
: V6001 рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ 'tokenRange.getBegin ()ред GetRange ()ред IsPresent ()' рдмрд╛рдИрдВ рдУрд░ рдФрд░ '&&' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ред рдиреЛрдб.рдЬрд╛рд╡рд╛ 213
public Node setTokenRange(TokenRange tokenRange) { this.tokenRange = tokenRange; if (tokenRange == null || !(tokenRange.getBegin().getRange().isPresent() && tokenRange.getBegin().getRange().isPresent())) { range = null; } else { range = new Range( tokenRange.getBegin().getRange().get().begin, tokenRange.getEnd().getRange().get().end); } return this; }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╕рдорд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ
&& рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╣реИрдВ (рдЬрдмрдХрд┐ рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕рд╛рдлрд╝ рд╣реИрдВ)ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ
tokenRange.getEnd () , рдФрд░
tokenRange.getBegin () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: рдПрдХ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдирд┐рд░рдВрддрд░ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ 'typeDeclaration.getTypeParameters ()' рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрддреНрд╡ рддрдХ V6016 рд╕рдВрджрд┐рдЧреНрдз рдкрд╣реБрдВрдЪред рд╕рдВрдХрд▓реНрдкред рд╕рдВрджрд░реНрднред Java 265 if (!isRawType()) { for (int i=0; i<typeDeclaration.getTypeParams().size(); i++) { typeParametersMap.add( new Pair<>(typeDeclaration.getTypeParams().get(0), typeParametersValues().get(i))); } }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рд▓реВрдк рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕реНрдерд┐рд░ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣ рдЖрдЗрдЯрдо рддрдХ рд╕рдВрджрд┐рдЧреНрдз рдкрд╣реБрдВрдЪ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдЗрд╕ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИредрдЬреЗрдирдХрд┐рдВрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'cnt <5' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддреА рд╣реИред AbstractProject.java 557 public final R getSomeBuildWithWorkspace() { int cnt = 0; for (R b = getLastBuild(); cnt < 5 && b ! = null; b = b.getPreviousBuild()) { FilePath ws = b.getWorkspace(); if (ws != null) return b; } return null; }
рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд╛рдБрдЪ рддрдХ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cnt рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдмрдврд╝рд╛рдирд╛ рднреВрд▓ рдЧрдпрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЪреЗрдХ рдмреЗрдХрд╛рд░ рд╣реИредрд╕реНрдкрд╛рд░реНрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V6007 рдПрдХреНрд╕рдкреНрд░реЗрд╢рди 'рд╕реНрдкрд╛рд░реНрдХрдРрдкреНрд▓рд┐рдХреЗрд╢рдВрд╕! = рдирд▓' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред рд╕реНрдкрд╛рд░реНрдХрдлрд┐рд▓реНрдЯрд░.рдЬрд╛рд╡рд╛ 127 if (StringUtils.isNotBlank(applications)) { final String[] sparkApplications = applications.split(","); if (sparkApplications != null && sparkApplications.length > 0) { ... } }
рд╡рд┐рднрд╛рдЬрд┐рдд рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╡реНрдпрд░реНрде рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд▓реМрдЯрд╛рддреА рд╣реИ рдФрд░ рдХрднреА рднреА рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд▓реМрдЯрддреА рд╣реИ редрдЪрдореНрдордЪ рдкрд░рд┐рдпреЛрдЬрдирд╛
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6001 рд╕рдорд╛рди рдЙрдк-рднрд╛рд╡ рд╣реИрдВ '! MgetSimpleName ()ред StartsWith ("рд╕реЗрдЯ") рдмрд╛рдИрдВ рдУрд░ рдФрд░' && 'рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╣реИред рд╕реНрдкреВрдирдЯреЗрд╕реНрдЯ рд╣реЗрд▓реНрдкрд░реНрд╕.рдЬрд╛рд╡рд╛ 108 if (!m.getSimpleName().startsWith("set") && !m.getSimpleName().startsWith("set")) { continue; }
рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╕рдорд╛рди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ && рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╣реИрдВ (рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рднреА рддрд░реАрдХреЗ рд╕рд╛рдлрд╝ рд╣реИрдВ)ред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХреЛрдб рдореЗрдВ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИредPVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'idxOfScopeBoundTypeParam> = 0' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИред MethodTypingContext.java 243 private boolean isSameMethodFormalTypeParameter(....) { .... int idxOfScopeBoundTypeParam = getIndexOfTypeParam(....); if (idxOfScopeBoundTypeParam >= 0) {
рдпрд╣рд╛рдВ рд╡реЗ рджреВрд╕рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реАрд▓ рдХрд░ рджрд┐рдП рдЧрдП рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп idxOfSuperBoundTypeParam рдиреЗ idxOfScopeBoundTypeParam рд▓рд┐рдЦрд╛ редрд╕реНрдкреНрд░рд┐рдВрдЧ рд╕рд┐рдХреНрдпреЛрд░рд┐рдЯреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ
PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6001 рдмрд╛рдИрдВ рдФрд░ 'рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ' || рдСрдкрд░реЗрдЯрд░ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 38, 39. AnyRequestMatcher.java 38 @Override @SuppressWarnings("deprecation") public boolean equals(Object obj) { return obj instanceof AnyRequestMatcher || obj instanceof security.web.util.matcher.AnyRequestMatcher; }
рдСрдкрд░реЗрд╢рди рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ - рдпрд╣рд╛рдВ рдПрдХ рд╣реА рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИредPVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6006 рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред 'рдереНрд░реЛ' рдХреАрд╡рд░реНрдб рдЧрд╛рдпрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рдирдлрд┐рд▓реНрдЯрд░.рдЬрд╛рд╡рд╛ 434 if (!expectedNonceSignature.equals(nonceTokens[1])) { new BadCredentialsException( DigestAuthenticationFilter.this.messages .getMessage("DigestAuthenticationFilter.nonceCompromised", new Object[] { nonceAsPlainText }, "Nonce token compromised {0}")); }
рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╡реЗ рдЕрдкрд╡рд╛рдж рд╕реЗ рдкрд╣рд▓реЗ рдлреЗрдВрдХ рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдП ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, BadCredentialsException рдЕрдкрд╡рд╛рдж рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдПрдХ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реИредрдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V6030 'рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╡рд┐рдзрд┐' | рдмрд╛рдПрдВ рдСрдкрд░реЗрдВрдб рдХреЗ рдореВрд▓реНрдп рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╢рд╛рдпрдж, '' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред RedirectUrlBuilder.java 38 public void setScheme(String scheme) { if (!("http".equals(scheme) | "https".equals(scheme))) { throw new IllegalArgumentException("..."); } this.scheme = scheme; }
рдЗрд╕ рдХреЛрдб рдореЗрдВ, рдХрд╛ рдЙрдкрдпреЛрдЧ | рдЕрдиреБрдЪрд┐рдд, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рджрд╛рдПрдВ рдкрдХреНрд╖ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреА рднрд▓реЗ рд╣реА рдмрд╛рдИрдВ рдУрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдЪ рд╣реЛред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ | рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд╛рдпрдХ || ред
рдЗрдВрдЯреЗрд▓реАрдЬ рдЖрдИрдбрд┐рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V6008 'рд╕рдВрдкрд╛рджрдХ' рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдЕрд╢рдХреНрддрддрд╛ред IntroduceVariableBase.java:609 final PsiElement nameSuggestionContext = editor == null ? null : file.findElementAt(...);
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕ рдХреЛрдб рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рдХреА рдЧрдбрд╝рдмрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИ ред рдпрд╣ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪреЗрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИредPVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реИред RefResolveServiceImpl.java:814 @Override public boolean contains(@NotNull VirtualFile file) { .... return false & !myProjectFileIndex.isUnderSourceRootOfType(....); }
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рдХреЗ рдорди рдореЗрдВ рдХреНрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреЛрдб рдмрд╣реБрдд рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЕрдЪрд╛рдирдХ рдпрд╣рд╛рдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдЬрдЧрд╣ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВредрдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V6007 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рдкрд░рд┐рдгрд╛рдо [0]' рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред CopyClassesHandler.java:298 final boolean[] result = new boolean[] {false};
рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╡реЗ рдХрд┐рд╕реА рддрд░рд╣ рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдореВрд▓реНрдп рдмрджрд▓рдирд╛ рднреВрд▓ рдЧрдП ред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЬрд╛рдБрдЪ (рдкрд░рд┐рдгрд╛рдо [0]) рд╡реНрдпрд░реНрде рд╣реИредрдирд┐рд╖реНрдХрд░реНрд╖
рдЬрд╛рд╡рд╛ рджрд┐рд╢рд╛ рдмрд╣реБрдд рдмрд╣реБрдореБрдЦреА рд╣реИ - рдпрд╣ рдбреЗрд╕реНрдХрдЯреЙрдк, рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб, рдФрд░ рд╡реЗрдм, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдЧрд╣ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдВрдЧ рдореЗрдВ рд╣реЛрдВрдЧреЗредрдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛рдПрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:- рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдПрдиреЛрдЯреЗрд╢рди;
- рдЪреАрдВрдЯреА рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрдХреАрдХрд░рдг (2018 рдореЗрдВ рдХреЛрдИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?);
- рдЧреНрд░рд╣рдг рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди (рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд);
- рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдирд┐рджрд╛рди рдФрд░ рдПрдиреЛрдЯреЗрд╢рди;
- рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рддрдВрддреНрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ред
рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдЬрд╛рд╡рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдорд░реНрдерди рдореЗрдВ рд╣рдореЗрдВ рд▓рд┐рдЦреЗрдВ ред рд╣рдо рд╕реВрдЪреА рдореЗрдВ рдЖрдкрдХрд╛ рд╕рдВрдкрд░реНрдХ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдЬрдм рд╣рдо рдкрд╣рд▓рд╛ рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ рддреЛ рдЖрдкрдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗред
рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: Egor Bredikhinред рдПрдХ рдирдП рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рд╡рд┐рдХрд╛рд╕: