This is an automated email from the ASF dual-hosted git repository.

apkhmv pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 960f55fa72 IGNITE-21650 Extend PMD ruleset to cover performance and 
multithreading issues (#3416)
960f55fa72 is described below

commit 960f55fa725bec88a563588c848b495671400635
Author: Viacheslav Blinov <[email protected]>
AuthorDate: Thu Mar 14 19:59:48 2024 +0300

    IGNITE-21650 Extend PMD ruleset to cover performance and multithreading 
issues (#3416)
    
    * Add performance-related PMD rules to ruleset
    * Add multithreading-related PMD rules to ruleset
---
 check-rules/pmd-rules.xml                          | 37 ++++++++++++++++++++++
 .../cli/call/cluster/unit/DeployUnitClient.java    |  4 +--
 .../ignite/internal/cli/config/ini/IniFile.java    |  4 +--
 .../ignite/internal/cli/config/ini/IniParser.java  |  4 +--
 .../core/repl/executor/IgnitePicocliCommands.java  |  6 ++--
 .../internal/cli/commands/flow/FlowTest.java       |  1 +
 .../apache/ignite/client/fakes/FakeSession.java    |  8 ++---
 .../internal/lang/IgniteStringFormatter.java       |  8 +++--
 .../tostring/IgniteToStringBuilderSelfTest.java    | 26 +++++++--------
 .../internal/network/file/ChunkedFileReader.java   |  4 +--
 .../internal/network/file/ChunkedFileWriter.java   |  4 +--
 .../internal/jdbc/ConnectionPropertiesImpl.java    |  8 ++---
 .../metrics/exporters/jmx/MetricSetMbean.java      |  2 +-
 ...TransferableObjectProcessorIncrementalTest.java |  2 +-
 .../network/ssl/SslContextProviderTest.java        |  8 +++--
 .../internal/pagememory/persistence/FastCrc.java   |  4 +--
 .../persistence/RobinHoodBackwardShiftHashMap.java | 14 ++++----
 .../ignite/internal/pagememory/tree/BplusTree.java | 11 +++----
 .../raft/client/TopologyAwareRaftGroupService.java |  2 +-
 .../sql/engine/exec/exp/ExpressionFactoryImpl.java |  5 ++-
 .../sql/engine/exec/mapping/FragmentPrinter.java   |  2 +-
 .../sql/engine/exec/mapping/MappingTestRunner.java | 30 +++++++++---------
 .../internal/worker/CriticalWorkerWatchdog.java    | 33 +++++++++----------
 23 files changed, 133 insertions(+), 94 deletions(-)

diff --git a/check-rules/pmd-rules.xml b/check-rules/pmd-rules.xml
index 381d50e159..2f1627fca7 100644
--- a/check-rules/pmd-rules.xml
+++ b/check-rules/pmd-rules.xml
@@ -82,6 +82,7 @@
     <rule ref="category/java/codestyle.xml/UnnecessarySemicolon" />
     <rule ref="category/java/codestyle.xml/UseDiamondOperator" />
 
+
     <!-- TODO: https://issues.apache.org/jira/browse/IGNITE-21652 -->
     <!--        <rule ref="category/java/codestyle.xml/IdenticalCatchBranches" 
/>-->
     <!--        <rule 
ref="category/java/codestyle.xml/UnnecessaryFullyQualifiedName" />-->
@@ -99,11 +100,44 @@
     <!--        <rule ref="category/java/codestyle.xml/ConfusingTernary" />-->
     <!--        <rule ref="category/java/codestyle.xml/PrematureDeclaration" 
/>-->
 
+    <rule ref="category/java/performance.xml/AppendCharacterWithChar" />
+    <rule ref="category/java/performance.xml/AvoidArrayLoops" />
+    <rule ref="category/java/performance.xml/AvoidCalendarDateCreation" />
+    <rule ref="category/java/performance.xml/InefficientEmptyStringCheck" />
+    <rule ref="category/java/performance.xml/StringInstantiation" />
+    <rule ref="category/java/performance.xml/StringToString" />
+    <rule ref="category/java/performance.xml/UseArrayListInsteadOfVector" />
+    <rule ref="category/java/performance.xml/UseArraysAsList" />
+    <rule ref="category/java/performance.xml/UseIndexOfChar" />
+    <rule 
ref="category/java/performance.xml/UseIOStreamsWithApacheCommonsFileItem" />
+    <rule ref="category/java/performance.xml/UselessStringValueOf" />
+    <rule ref="category/java/performance.xml/UseStringBufferForStringAppends" 
/>
+    <rule ref="category/java/performance.xml/UseStringBufferLength" />
+    <rule ref="category/java/performance.xml/AvoidFileStream" />
+    <rule ref="category/java/performance.xml/OptimizableToArrayCall" />
+    <rule ref="category/java/performance.xml/ConsecutiveAppendsShouldReuse" />
+    <rule ref="category/java/performance.xml/InefficientStringBuffering" />
+    <rule ref="category/java/performance.xml/BigIntegerInstantiation">
+        <properties>
+            <!-- Ignore in tests -->
+            <property name="violationSuppressXPath" 
value="//ClassOrInterfaceDeclaration['.*/src/test/java/.*']"/>
+        </properties>
+    </rule>
+
+
+    <rule ref="category/java/multithreading.xml/AvoidThreadGroup" />
+    <rule ref="category/java/multithreading.xml/DontCallThreadRun" />
+    <rule ref="category/java/multithreading.xml/DoubleCheckedLocking" />
+    <rule ref="category/java/multithreading.xml/NonThreadSafeSingleton" />
+    <rule ref="category/java/multithreading.xml/UnsynchronizedStaticFormatter" 
/>
+    <rule ref="category/java/multithreading.xml/UseNotifyAllInsteadOfNotify" />
+
 
     <!--
         UnusedPrivateMethod has a known bug which leads to false positive 
triggering if
         method signature contains generic parameter and\or descendant class is 
passed as parameter.
         See for details: https://github.com/pmd/pmd/issues/770
+        This was fixed in PMD 7.0.0 so should be returned when we upgrade the 
PMD
     -->
     <!--    <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod" 
/>-->
 
@@ -126,4 +160,7 @@
         </properties>
     </rule>
 
+
+    <!-- exclusions -->
+    <exclude-pattern>.*/src/main/java/com/facebook/presto/.*</exclude-pattern>
 </ruleset>
diff --git 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/unit/DeployUnitClient.java
 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/unit/DeployUnitClient.java
index 40ba0feb28..e390e21154 100644
--- 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/unit/DeployUnitClient.java
+++ 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/call/cluster/unit/DeployUnitClient.java
@@ -99,8 +99,8 @@ public class DeployUnitClient {
         StringBuilder url = new StringBuilder(apiClient.getBasePath());
         url
                 .append("/management/v1/deployment/units")
-                .append("/").append(apiClient.escapeString(unitId))
-                .append("/").append(apiClient.escapeString(unitVersion));
+                .append('/').append(apiClient.escapeString(unitId))
+                .append('/').append(apiClient.escapeString(unitVersion));
 
         List<Pair> queryParams = new ArrayList<>();
 
diff --git 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniFile.java
 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniFile.java
index 977e302dd0..b10b1d011c 100644
--- 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniFile.java
+++ 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniFile.java
@@ -19,11 +19,11 @@ package org.apache.ignite.internal.cli.config.ini;
 
 import java.io.BufferedWriter;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.Collection;
 import java.util.Map;
 import org.apache.ignite.internal.cli.config.exception.ConfigStoringException;
@@ -75,7 +75,7 @@ public class IniFile {
      * Store current INI file to FS file.
      */
     public void store() {
-        try (OutputStream os = new FileOutputStream(file)) {
+        try (OutputStream os = Files.newOutputStream(file.toPath())) {
             store(os);
         } catch (IOException e) {
             throw new ConfigStoringException("Can't store cli config file " + 
file.getAbsolutePath(), e);
diff --git 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniParser.java
 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniParser.java
index 0ecc00dbe3..25606affe1 100644
--- 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniParser.java
+++ 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/config/ini/IniParser.java
@@ -21,11 +21,11 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 
 import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.nio.file.Files;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
@@ -70,7 +70,7 @@ public class IniParser {
      * @throws IOException when parsing failed.
      */
     public Map<String, IniSection> parse(File file) throws IOException {
-        try (FileInputStream input = new FileInputStream(file)) {
+        try (InputStream input = Files.newInputStream(file.toPath())) {
             return parse(input);
         }
     }
diff --git 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/executor/IgnitePicocliCommands.java
 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/executor/IgnitePicocliCommands.java
index d31bd5d23e..7a654326b7 100644
--- 
a/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/executor/IgnitePicocliCommands.java
+++ 
b/modules/cli/src/main/java/org/apache/ignite/internal/cli/core/repl/executor/IgnitePicocliCommands.java
@@ -126,7 +126,7 @@ public class IgnitePicocliCommands implements 
CommandRegistry {
             return null;
         }
         CommandSpec spec = sub.getCommandSpec();
-        Help cmdhelp = new picocli.CommandLine.Help(spec);
+        Help cmdhelp = new Help(spec);
         List<AttributedString> main = new ArrayList<>();
         Map<String, List<AttributedString>> options = new HashMap<>();
         String synopsis = 
AttributedString.stripAnsi(spec.usageMessage().sectionMap().get("synopsis").render(cmdhelp));
@@ -140,7 +140,7 @@ public class IgnitePicocliCommands implements 
CommandRegistry {
                 val.add(new AttributedString(d));
             }
             if (o.arity().max() > 0) {
-                key += "=" + o.paramLabel();
+                key += "=" + o.paramLabel(); // NOPMD
             }
             options.put(key, val);
         }
@@ -151,7 +151,7 @@ public class IgnitePicocliCommands implements 
CommandRegistry {
     @Override
     public List<String> commandInfo(String command) {
         CommandSpec spec = cmd.getSubcommands().get(command).getCommandSpec();
-        Help cmdhelp = new picocli.CommandLine.Help(spec);
+        Help cmdhelp = new Help(spec);
         String description = 
AttributedString.stripAnsi(spec.usageMessage().sectionMap().get("description").render(cmdhelp));
         return new ArrayList<>(Arrays.asList(description.split("\\r?\\n")));
     }
diff --git 
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/FlowTest.java
 
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/FlowTest.java
index d72613a933..dbbf942662 100644
--- 
a/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/FlowTest.java
+++ 
b/modules/cli/src/test/java/org/apache/ignite/internal/cli/commands/flow/FlowTest.java
@@ -95,6 +95,7 @@ class FlowTest {
     }
 
     @BeforeEach
+    @SuppressWarnings("PMD.AvoidFileStream")
     public void setup() throws IOException {
         input = Files.createTempFile("input", "");
         input.toFile().deleteOnExit();
diff --git 
a/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeSession.java 
b/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeSession.java
index 92dfde0d84..7a87b387a1 100644
--- 
a/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeSession.java
+++ 
b/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeSession.java
@@ -206,10 +206,10 @@ public class FakeSession implements AbstractSession {
             sb.append(']');
         }
 
-        sb.append(", ").append("defaultPageSize=").append(defaultPageSize);
-        sb.append(", ").append("defaultSchema=").append(defaultSchema);
-        sb.append(", 
").append("defaultQueryTimeout=").append(defaultQueryTimeout);
-        sb.append(", 
").append("defaultSessionTimeout=").append(defaultSessionTimeout);
+        sb.append(", ").append("defaultPageSize=").append(defaultPageSize)
+                .append(", ").append("defaultSchema=").append(defaultSchema)
+                .append(", 
").append("defaultQueryTimeout=").append(defaultQueryTimeout)
+                .append(", 
").append("defaultSessionTimeout=").append(defaultSessionTimeout);
 
         sql.lastScript = sb.toString();
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/lang/IgniteStringFormatter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/lang/IgniteStringFormatter.java
index c23c9762c9..acdbf4f037 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/lang/IgniteStringFormatter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/lang/IgniteStringFormatter.java
@@ -223,9 +223,11 @@ public final class IgniteStringFormatter {
 
             sbuf.append(s);
         } catch (Throwable t) {
-            sbuf.append("Failed toString() invocation on an object of type 
[cls=" + o.getClass().getName()
-                    + ", errMsg=" + t.getClass().getName()
-                    + ", errMsg=" + t.getMessage() + ']');
+            sbuf.append("Failed toString() invocation on an object of type 
[cls=")
+                    .append(o.getClass().getName())
+                    .append(", errMsg=").append(t.getClass().getName())
+                    .append(", errMsg=").append(t.getMessage())
+                    .append(']');
         }
     }
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/tostring/IgniteToStringBuilderSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/tostring/IgniteToStringBuilderSelfTest.java
index 5a77773bfe..3aaf671bc5 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/tostring/IgniteToStringBuilderSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/tostring/IgniteToStringBuilderSelfTest.java
@@ -708,24 +708,22 @@ public class IgniteToStringBuilderSelfTest extends 
IgniteAbstractTest {
          * @return Manual string.
          */
         String toStringManual() {
-            StringBuilder buf = new StringBuilder();
+            StringBuilder buf = new StringBuilder()
+                    .append(getClass().getSimpleName()).append(" [")
+                    .append("id=").append(id).append(", ")
+                    .append("uuidVar=").append(uuidVar).append(", ")
+                    .append("intVar=").append(intVar).append(", ");
 
-            buf.append(getClass().getSimpleName()).append(" [");
-
-            buf.append("id=").append(id).append(", ");
-            buf.append("uuidVar=").append(uuidVar).append(", ");
-            buf.append("intVar=").append(intVar).append(", ");
             if (S.includeSensitive()) {
                 buf.append("longVar=").append(longVar).append(", ");
             }
-            buf.append("boolVar=").append(boolVar).append(", ");
-            buf.append("byteVar=").append(byteVar).append(", ");
-            buf.append("name=").append(name).append(", ");
-            buf.append("finalInt=").append(finalInt).append(", ");
-            buf.append("strMap=").append(strMap).append(", ");
-            buf.append("strListIncl=").append(strListIncl);
-
-            buf.append("]");
+            buf.append("boolVar=").append(boolVar).append(", ")
+                    .append("byteVar=").append(byteVar).append(", ")
+                    .append("name=").append(name).append(", ")
+                    .append("finalInt=").append(finalInt).append(", ")
+                    .append("strMap=").append(strMap).append(", ")
+                    .append("strListIncl=").append(strListIncl)
+                    .append(']');
 
             return buf.toString();
         }
diff --git 
a/modules/file-transfer/src/main/java/org/apache/ignite/internal/network/file/ChunkedFileReader.java
 
b/modules/file-transfer/src/main/java/org/apache/ignite/internal/network/file/ChunkedFileReader.java
index 2513310af8..88cef4c2ce 100644
--- 
a/modules/file-transfer/src/main/java/org/apache/ignite/internal/network/file/ChunkedFileReader.java
+++ 
b/modules/file-transfer/src/main/java/org/apache/ignite/internal/network/file/ChunkedFileReader.java
@@ -19,9 +19,9 @@ package org.apache.ignite.internal.network.file;
 
 import java.io.BufferedInputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.nio.file.Files;
 
 /**
  * Chunked file reader. Reads the file in chunks. Each chunk has a fixed size. 
The last chunk may be smaller than the chunk size. If the
@@ -57,7 +57,7 @@ class ChunkedFileReader implements AutoCloseable {
      * @throws FileNotFoundException If the file does not exist.
      */
     static ChunkedFileReader open(File file, int chunkSize) throws IOException 
{
-        return new ChunkedFileReader(chunkSize, new BufferedInputStream(new 
FileInputStream(file)));
+        return new ChunkedFileReader(chunkSize, new 
BufferedInputStream(Files.newInputStream(file.toPath())));
     }
 
     /**
diff --git 
a/modules/file-transfer/src/main/java/org/apache/ignite/internal/network/file/ChunkedFileWriter.java
 
b/modules/file-transfer/src/main/java/org/apache/ignite/internal/network/file/ChunkedFileWriter.java
index 505bf6178a..30653709a7 100644
--- 
a/modules/file-transfer/src/main/java/org/apache/ignite/internal/network/file/ChunkedFileWriter.java
+++ 
b/modules/file-transfer/src/main/java/org/apache/ignite/internal/network/file/ChunkedFileWriter.java
@@ -20,8 +20,8 @@ package org.apache.ignite.internal.network.file;
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.file.Files;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import 
org.apache.ignite.internal.network.file.exception.FileValidationException;
@@ -59,7 +59,7 @@ class ChunkedFileWriter implements AutoCloseable {
      * @throws FileNotFoundException If the file is not found.
      */
     static ChunkedFileWriter open(File file, long expectedFileLength) throws 
IOException {
-        return new ChunkedFileWriter(new BufferedOutputStream(new 
FileOutputStream(file)), expectedFileLength);
+        return new ChunkedFileWriter(new 
BufferedOutputStream(Files.newOutputStream(file.toPath())), expectedFileLength);
     }
 
     /**
diff --git 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/ConnectionPropertiesImpl.java
 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/ConnectionPropertiesImpl.java
index 28644ea8f2..a34499b9c1 100644
--- 
a/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/ConnectionPropertiesImpl.java
+++ 
b/modules/jdbc/src/main/java/org/apache/ignite/internal/jdbc/ConnectionPropertiesImpl.java
@@ -394,9 +394,9 @@ public class ConnectionPropertiesImpl implements 
ConnectionProperties, Serializa
      */
     private void parseUrl0(String url, Properties props) throws SQLException {
         // Determine mode - semicolon or ampersand.
-        int semicolonPos = url.indexOf(";");
-        int slashPos = url.indexOf("/");
-        int queryPos = url.indexOf("?");
+        int semicolonPos = url.indexOf(';');
+        int slashPos = url.indexOf('/');
+        int queryPos = url.indexOf('?');
 
         boolean semicolonMode;
 
@@ -553,7 +553,7 @@ public class ConnectionPropertiesImpl implements 
ConnectionProperties, Serializa
                     insideBrace = true;
                 }
             } else {
-                val += delimChar + token;
+                val += delimChar + token; // NOPMD
             }
 
             if (val.endsWith("}")) {
diff --git 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/exporters/jmx/MetricSetMbean.java
 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/exporters/jmx/MetricSetMbean.java
index 86da7a92ac..95486794e1 100644
--- 
a/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/exporters/jmx/MetricSetMbean.java
+++ 
b/modules/metrics/src/main/java/org/apache/ignite/internal/metrics/exporters/jmx/MetricSetMbean.java
@@ -137,7 +137,7 @@ public class MetricSetMbean implements DynamicMBean {
         return new MBeanInfo(
                 MetricManager.class.getName(),
                 metricSet.name(),
-                attrs.toArray(new MBeanAttributeInfo[attrs.size()]),
+                attrs.toArray(new MBeanAttributeInfo[0]),
                 null,
                 null,
                 null);
diff --git 
a/modules/network/src/test/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessorIncrementalTest.java
 
b/modules/network/src/test/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessorIncrementalTest.java
index c81b5fc654..a8e6542ef0 100644
--- 
a/modules/network/src/test/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessorIncrementalTest.java
+++ 
b/modules/network/src/test/java/org/apache/ignite/internal/network/processor/TransferableObjectProcessorIncrementalTest.java
@@ -246,7 +246,7 @@ public class TransferableObjectProcessorIncrementalTest 
extends BaseIgniteAbstra
             String line;
 
             while ((line = bufferedReader.readLine()) != null) {
-                builder.append(line).append("\n");
+                builder.append(line).append('\n');
             }
 
             return builder.toString();
diff --git 
a/modules/network/src/test/java/org/apache/ignite/internal/network/ssl/SslContextProviderTest.java
 
b/modules/network/src/test/java/org/apache/ignite/internal/network/ssl/SslContextProviderTest.java
index 41056cfafb..e17fe49edc 100644
--- 
a/modules/network/src/test/java/org/apache/ignite/internal/network/ssl/SslContextProviderTest.java
+++ 
b/modules/network/src/test/java/org/apache/ignite/internal/network/ssl/SslContextProviderTest.java
@@ -26,9 +26,11 @@ import static org.junit.Assert.assertThrows;
 
 import io.netty.handler.ssl.SslContext;
 import io.netty.handler.ssl.util.SelfSignedCertificate;
-import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.OutputStream;
+import java.nio.file.Files;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.security.KeyStore;
 import java.security.KeyStoreException;
 import java.security.NoSuchAlgorithmException;
@@ -73,7 +75,7 @@ class SslContextProviderTest extends BaseIgniteAbstractTest {
         KeyStore ts = KeyStore.getInstance("JKS");
         ts.load(null, null);
         ts.setCertificateEntry("cert", cert.cert());
-        try (FileOutputStream fos = new FileOutputStream(trustStoreJks12Path)) 
{
+        try (OutputStream fos = 
Files.newOutputStream(Paths.get(trustStoreJks12Path))) {
             ts.store(fos, password.toCharArray());
         }
     }
@@ -83,7 +85,7 @@ class SslContextProviderTest extends BaseIgniteAbstractTest {
         KeyStore ks = KeyStore.getInstance("PKCS12");
         ks.load(null, null);
         ks.setKeyEntry("key", cert.key(), password.toCharArray(), new 
Certificate[]{cert.cert()});
-        try (FileOutputStream fos = new FileOutputStream(keyStorePkcs12Path)) {
+        try (OutputStream fos = 
Files.newOutputStream(Paths.get(keyStorePkcs12Path))) {
             ks.store(fos, password.toCharArray());
         }
     }
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/FastCrc.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/FastCrc.java
index e547da7edf..bd2df50b30 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/FastCrc.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/FastCrc.java
@@ -18,10 +18,10 @@
 package org.apache.ignite.internal.pagememory.persistence;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
+import java.nio.file.Files;
 import java.util.zip.CRC32;
 import java.util.zip.CheckedInputStream;
 
@@ -100,7 +100,7 @@ public class FastCrc {
 
         CRC32 algo = new CRC32();
 
-        try (InputStream in = new CheckedInputStream(new 
FileInputStream(file), algo)) {
+        try (InputStream in = new 
CheckedInputStream(Files.newInputStream(file.toPath()), algo)) {
             byte[] buf = new byte[1024];
 
             while (in.read(buf) != -1) {
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/RobinHoodBackwardShiftHashMap.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/RobinHoodBackwardShiftHashMap.java
index 7b70537d5e..799b3f8a32 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/RobinHoodBackwardShiftHashMap.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/RobinHoodBackwardShiftHashMap.java
@@ -548,13 +548,13 @@ public class RobinHoodBackwardShiftHashMap implements 
LoadedPagesMap {
             sb.append("Empty: ");
         }
 
-        sb.append("i.buc=").append(getIdealBucket(base)).append(",");
-        sb.append("(grp=").append(curGrpId).append(",");
-        sb.append("page=").append(curPageId).append(")");
-        sb.append("->");
-        sb.append("(val=").append(curVal).append(",");
-        sb.append("ver=").append(ver).append(")");
-        sb.append("\n");
+        sb.append("i.buc=").append(getIdealBucket(base)).append(',')
+                .append("(grp=").append(curGrpId).append(',')
+                .append("page=").append(curPageId).append(')')
+                .append("->")
+                .append("(val=").append(curVal).append(',')
+                .append("ver=").append(ver).append(')')
+                .append('\n');
     }
 
     /**
diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/tree/BplusTree.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/tree/BplusTree.java
index 7924751fc7..3b8dde9f64 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/tree/BplusTree.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/tree/BplusTree.java
@@ -1963,16 +1963,15 @@ public abstract class BplusTree<L, T extends L> extends 
DataStructure implements
     private String printPage(BplusIo<L> io, long pageAddr, boolean keys) 
throws IgniteInternalCheckedException {
         StringBuilder b = new StringBuilder();
 
-        b.append(formatPageId(PageIo.getPageId(pageAddr)));
-
-        b.append(" [ ");
-        b.append(io.isLeaf() ? "L " : "I ");
+        b.append(formatPageId(PageIo.getPageId(pageAddr)))
+                .append(" [ ")
+                .append(io.isLeaf() ? "L " : "I ");
 
         int cnt = io.getCount(pageAddr);
         long fwdId = io.getForward(pageAddr, partId);
 
-        b.append("cnt=").append(cnt).append(' ');
-        b.append("fwd=").append(formatPageId(fwdId)).append(' ');
+        b.append("cnt=").append(cnt).append(' ')
+                .append("fwd=").append(formatPageId(fwdId)).append(' ');
 
         if (!io.isLeaf()) {
             b.append("lm=").append(formatPageId(inner(io).getLeft(pageAddr, 0, 
partId))).append(' ');
diff --git 
a/modules/replicator/src/main/java/org/apache/ignite/internal/raft/client/TopologyAwareRaftGroupService.java
 
b/modules/replicator/src/main/java/org/apache/ignite/internal/raft/client/TopologyAwareRaftGroupService.java
index daa5e7d64d..015a829e90 100644
--- 
a/modules/replicator/src/main/java/org/apache/ignite/internal/raft/client/TopologyAwareRaftGroupService.java
+++ 
b/modules/replicator/src/main/java/org/apache/ignite/internal/raft/client/TopologyAwareRaftGroupService.java
@@ -368,7 +368,7 @@ public class TopologyAwareRaftGroupService implements 
RaftGroupService {
 
         subscribersMap.clear();
 
-        return allOf(futs.toArray(new CompletableFuture[futs.size()]));
+        return allOf(futs.toArray(new CompletableFuture[0]));
     }
 
     @Override
diff --git 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java
 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java
index 30c81c1705..6e4e604ca1 100644
--- 
a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java
+++ 
b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/engine/exec/exp/ExpressionFactoryImpl.java
@@ -644,9 +644,8 @@ public class ExpressionFactoryImpl<RowT> implements 
ExpressionFactory<RowT> {
             }.apply(node);
         }
 
-        b.append(", biParam=").append(biParam);
-
-        b.append(']');
+        b.append(", biParam=").append(biParam)
+                .append(']');
 
         if (type != null) {
             b.append(':').append(type.getFullTypeString());
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/FragmentPrinter.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/FragmentPrinter.java
index 4577a1eaca..f03bfc42ab 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/FragmentPrinter.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/FragmentPrinter.java
@@ -398,7 +398,7 @@ final class FragmentPrinter extends IgniteRelShuttle {
             }
             builder.setLength(builder.length() - 2);
 
-            builder.append("]");
+            builder.append(']');
         }
 
         /** Writes string property: {@code name: value}. */
diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingTestRunner.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingTestRunner.java
index c9e92c1d8c..52fd8a6e50 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingTestRunner.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/mapping/MappingTestRunner.java
@@ -208,14 +208,13 @@ final class MappingTestRunner {
         try {
             mappedFragments = await(mappingService.map(plan, 
MappingParameters.EMPTY));
         } catch (Exception e) {
-            StringBuilder sb = new StringBuilder();
-            sb.append(System.lineSeparator());
-            sb.append(RelOptUtil.toString(plan.root()));
-            sb.append(System.lineSeparator());
+            String explanation = System.lineSeparator()
+                    + RelOptUtil.toString(plan.root())
+                    + System.lineSeparator();
 
             Throwable cause = e instanceof CompletionException ? e.getCause() 
: e;
 
-            throw new IllegalStateException("Failed to map a plan: " + sb, 
cause);
+            throw new IllegalStateException("Failed to map a plan: " + 
explanation, cause);
         }
 
         if (mappedFragments == null) {
@@ -299,16 +298,17 @@ final class MappingTestRunner {
             testCaseStr.append(System.lineSeparator());
         }
 
-        testCaseStr.append(testCaseDef.nodeName);
-        testCaseStr.append(System.lineSeparator());
-        testCaseStr.append(testCaseDef.sql);
-        testCaseStr.append(System.lineSeparator());
-        testCaseStr.append("---");
-        testCaseStr.append(System.lineSeparator());
-        testCaseStr.append(result);
-        testCaseStr.append(System.lineSeparator());
-        testCaseStr.append("---");
-        testCaseStr.append(System.lineSeparator());
+        testCaseStr
+                .append(testCaseDef.nodeName)
+                .append(System.lineSeparator())
+                .append(testCaseDef.sql)
+                .append(System.lineSeparator())
+                .append("---")
+                .append(System.lineSeparator())
+                .append(result)
+                .append(System.lineSeparator())
+                .append("---")
+                .append(System.lineSeparator());
     }
 
     enum ParseState {
diff --git 
a/modules/workers/src/main/java/org/apache/ignite/internal/worker/CriticalWorkerWatchdog.java
 
b/modules/workers/src/main/java/org/apache/ignite/internal/worker/CriticalWorkerWatchdog.java
index edfc442108..767883e5d5 100644
--- 
a/modules/workers/src/main/java/org/apache/ignite/internal/worker/CriticalWorkerWatchdog.java
+++ 
b/modules/workers/src/main/java/org/apache/ignite/internal/worker/CriticalWorkerWatchdog.java
@@ -169,23 +169,24 @@ public class CriticalWorkerWatchdog implements 
CriticalWorkerRegistry, IgniteCom
         return delayedThreadIdsToDelays;
     }
 
-    @SuppressWarnings("StringConcatenationInsideStringBufferAppend")
     private static String toString(ThreadInfo threadInfo) {
         // This method is based on code taken from ThreadInfo#toString(). The 
original method limits the depth of the
         // stacktrace it includes in the string representation to just 8 
frames, which is too few. Here, we
         // removed this limitation and include the stack trace in its entirety.
 
-        StringBuilder sb = new StringBuilder("\"" + threadInfo.getThreadName() 
+ "\""
-                + (threadInfo.isDaemon() ? " daemon" : "")
-                + " prio=" + threadInfo.getPriority()
-                + " Id=" + threadInfo.getThreadId() + " "
-                + threadInfo.getThreadState());
+        StringBuilder sb = new StringBuilder()
+                .append('\"').append(threadInfo.getThreadName()).append('\"')
+                .append(threadInfo.isDaemon() ? " daemon" : "")
+                .append(" prio=").append(threadInfo.getPriority())
+                .append(" Id=").append(threadInfo.getThreadId()).append(' ')
+                .append(threadInfo.getThreadState());
+
         if (threadInfo.getLockName() != null) {
-            sb.append(" on " + threadInfo.getLockName());
+            sb.append(" on ").append(threadInfo.getLockName());
         }
         if (threadInfo.getLockOwnerName() != null) {
-            sb.append(" owned by \"" + threadInfo.getLockOwnerName()
-                    + "\" Id=" + threadInfo.getLockOwnerId());
+            sb.append(" owned by \"").append(threadInfo.getLockOwnerName())
+                    .append("\" Id=").append(threadInfo.getLockOwnerId());
         }
         if (threadInfo.isSuspended()) {
             sb.append(" (suspended)");
@@ -197,21 +198,21 @@ public class CriticalWorkerWatchdog implements 
CriticalWorkerRegistry, IgniteCom
         int i = 0;
         for (; i < threadInfo.getStackTrace().length; i++) {
             StackTraceElement ste = threadInfo.getStackTrace()[i];
-            sb.append("\tat " + ste.toString());
+            sb.append("\tat ").append(ste.toString());
             sb.append('\n');
             if (i == 0 && threadInfo.getLockInfo() != null) {
                 Thread.State ts = threadInfo.getThreadState();
                 switch (ts) {
                     case BLOCKED:
-                        sb.append("\t-  blocked on " + 
threadInfo.getLockInfo());
+                        sb.append("\t-  blocked on 
").append(threadInfo.getLockInfo());
                         sb.append('\n');
                         break;
                     case WAITING:
-                        sb.append("\t-  waiting on " + 
threadInfo.getLockInfo());
+                        sb.append("\t-  waiting on 
").append(threadInfo.getLockInfo());
                         sb.append('\n');
                         break;
                     case TIMED_WAITING:
-                        sb.append("\t-  waiting on " + 
threadInfo.getLockInfo());
+                        sb.append("\t-  waiting on 
").append(threadInfo.getLockInfo());
                         sb.append('\n');
                         break;
                     default:
@@ -220,7 +221,7 @@ public class CriticalWorkerWatchdog implements 
CriticalWorkerRegistry, IgniteCom
 
             for (MonitorInfo mi : threadInfo.getLockedMonitors()) {
                 if (mi.getLockedStackDepth() == i) {
-                    sb.append("\t-  locked " + mi);
+                    sb.append("\t-  locked ").append(mi);
                     sb.append('\n');
                 }
             }
@@ -228,10 +229,10 @@ public class CriticalWorkerWatchdog implements 
CriticalWorkerRegistry, IgniteCom
 
         LockInfo[] locks = threadInfo.getLockedSynchronizers();
         if (locks.length > 0) {
-            sb.append("\n\tNumber of locked synchronizers = " + locks.length);
+            sb.append("\n\tNumber of locked synchronizers = 
").append(locks.length);
             sb.append('\n');
             for (LockInfo li : locks) {
-                sb.append("\t- " + li);
+                sb.append("\t- ").append(li);
                 sb.append('\n');
             }
         }


Reply via email to