You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2022/11/08 00:11:19 UTC

[calcite-avatica] 02/02: [CALCITE-5329] Upgrade Checkstyle version from 6.18 to 10.3.2

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

jhyde pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite-avatica.git

commit 4cee17299766a97a2ba39901ad2639ee0d332e84
Author: Richard Antal <ri...@cloudera.com>
AuthorDate: Thu Nov 3 15:59:04 2022 +0100

    [CALCITE-5329] Upgrade Checkstyle version from 6.18 to 10.3.2
    
    Close apache/calcite-avatica#191
---
 .github/workflows/main.yml                         |  4 +-
 build.gradle.kts                                   |  1 -
 .../org/apache/calcite/avatica/AvaticaUtils.java   | 20 +++++++-
 .../org/apache/calcite/avatica/ColumnMetaData.java | 24 +++++-----
 .../calcite/avatica/ConnectStringParser.java       |  4 +-
 .../org/apache/calcite/avatica/DriverVersion.java  |  2 +-
 .../apache/calcite/avatica/remote/JsonHandler.java |  4 +-
 .../calcite/avatica/remote/LocalService.java       | 10 ++--
 .../calcite/avatica/remote/ProtobufHandler.java    |  4 +-
 .../avatica/remote/RemoteProtobufService.java      |  5 +-
 .../calcite/avatica/remote/RemoteService.java      |  4 +-
 .../calcite/avatica/util/AbstractCursor.java       |  5 +-
 .../org/apache/calcite/avatica/util/Base64.java    | 33 ++++++++-----
 .../apache/calcite/avatica/util/ByteString.java    |  2 +-
 .../org/apache/calcite/avatica/util/Cursor.java    |  2 +-
 .../apache/calcite/avatica/util/DateTimeUtils.java |  4 +-
 .../org/apache/calcite/avatica/util/Spaces.java    |  2 +-
 .../remote/AvaticaCommonsHttpClientImplTest.java   |  6 ++-
 .../calcite/avatica/remote/TypedValueTest.java     |  5 +-
 gradle.properties                                  |  4 +-
 .../org/apache/calcite/avatica/metrics/Timer.java  |  2 +-
 .../calcite/avatica/server/AvaticaJsonHandler.java |  4 +-
 .../avatica/server/AvaticaProtobufHandler.java     |  2 +-
 .../apache/calcite/avatica/RemoteDriverTest.java   |  4 +-
 .../avatica/remote/AlternatingRemoteMetaTest.java  |  4 +-
 .../calcite/avatica/remote/RemoteMetaTest.java     | 24 +++++-----
 .../avatica/server/AbstractAvaticaHandlerTest.java |  4 +-
 .../server/HttpServerSpnegoWithoutJaasTest.java    |  3 +-
 src/main/config/checkstyle/checker.xml             | 55 ++++++++++------------
 29 files changed, 138 insertions(+), 109 deletions(-)

diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 36db450e4..37651f091 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -58,7 +58,7 @@ jobs:
           fetch-depth: 50
       - name: 'Test'
         run: |
-          ./gradlew --no-parallel --no-daemon build javadoc
+          ./gradlew --no-parallel --no-daemon build javadoc -Pcheckstyle.version=9.3
 
   linux-jdk8-avatica:
     name: 'Linux (JDK 8), Avatica main'
@@ -74,7 +74,7 @@ jobs:
         fetch-depth: 50
     - name: 'Install Avatica to Maven Local'
       run: |
-        ./gradlew publishToMavenLocal -Pcalcite.avatica.version=1.0.0-dev-main -PskipJavadoc
+        ./gradlew publishToMavenLocal -Pcalcite.avatica.version=1.0.0-dev-main -PskipJavadoc -Pcheckstyle.version=9.3
     - name: 'Test Calcite'
       run: |
         git clone --depth 100 https://github.com/apache/calcite.git ../calcite
diff --git a/build.gradle.kts b/build.gradle.kts
index 4ef997542..88753b56e 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -208,7 +208,6 @@ allprojects {
         apply<CheckstylePlugin>()
         dependencies {
             checkstyle("com.puppycrawl.tools:checkstyle:${"checkstyle".v}")
-            checkstyle("net.hydromatic:toolbox:${"hydromatic-toolbox".v}")
         }
         checkstyle {
             // Current one is ~8.8
diff --git a/core/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java b/core/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java
index 000ebd0d3..ef27e8269 100644
--- a/core/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java
+++ b/core/src/main/java/org/apache/calcite/avatica/AvaticaUtils.java
@@ -20,10 +20,12 @@ import org.apache.calcite.avatica.util.UnsynchronizedBuffer;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
 import java.lang.reflect.Field;
+import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
@@ -288,7 +290,7 @@ public class AvaticaUtils {
       throws IOException {
     // Variant that lets us use a pooled Buffer
     final byte[] bytes = _readFully(inputStream, buffer);
-    return new String(bytes, 0, bytes.length, StandardCharsets.UTF_8);
+    return AvaticaUtils.newStringUtf8(bytes);
   }
 
   /** Reads the contents of an input stream and returns as a string. */
@@ -474,6 +476,22 @@ public class AvaticaUtils {
     }
     return longs;
   }
+
+  public static String newStringUtf8(final byte[] bytes) {
+    return newString(bytes, StandardCharsets.UTF_8);
+  }
+
+//CHECKSTYLE: OFF
+  public static String newString(final byte[] bytes, final Charset charset) {
+    return new String(bytes, charset);
+  }
+
+  public static String newString(final byte[] bytes, final String charsetName)
+      throws UnsupportedEncodingException {
+    return new String(bytes, charsetName);
+  }
+//CHECKSTYLE:ON
+
 }
 
 // End AvaticaUtils.java
diff --git a/core/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java b/core/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
index 4c5ed11b4..2c5d55b71 100644
--- a/core/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
+++ b/core/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
@@ -138,18 +138,18 @@ public class ColumnMetaData {
 
     // Primitive fields (can't be null)
     builder.setOrdinal(ordinal)
-      .setAutoIncrement(autoIncrement)
-      .setCaseSensitive(caseSensitive)
-      .setSearchable(searchable)
-      .setCurrency(currency)
-      .setNullable(nullable)
-      .setSigned(signed)
-      .setDisplaySize(displaySize)
-      .setPrecision(precision)
-      .setScale(scale)
-      .setReadOnly(readOnly)
-      .setWritable(writable)
-      .setDefinitelyWritable(definitelyWritable);
+        .setAutoIncrement(autoIncrement)
+        .setCaseSensitive(caseSensitive)
+        .setSearchable(searchable)
+        .setCurrency(currency)
+        .setNullable(nullable)
+        .setSigned(signed)
+        .setDisplaySize(displaySize)
+        .setPrecision(precision)
+        .setScale(scale)
+        .setReadOnly(readOnly)
+        .setWritable(writable)
+        .setDefinitelyWritable(definitelyWritable);
 
     // Potentially null fields
     if (null != label) {
diff --git a/core/src/main/java/org/apache/calcite/avatica/ConnectStringParser.java b/core/src/main/java/org/apache/calcite/avatica/ConnectStringParser.java
index 9efbcf113..b4b2562b7 100644
--- a/core/src/main/java/org/apache/calcite/avatica/ConnectStringParser.java
+++ b/core/src/main/java/org/apache/calcite/avatica/ConnectStringParser.java
@@ -174,7 +174,7 @@ public class ConnectStringParser {
       switch (c) {
       case '=':
         i++;
-        if ((i < n) && ((c = s.charAt(i)) == '=')) {
+        if (i < n && (c = s.charAt(i)) == '=') {
           // doubled equals sign; take one of them, and carry on
           i++;
           nameBuf.append(c);
@@ -216,7 +216,7 @@ public class ConnectStringParser {
         return "";
       }
     }
-    if ((c == '"') || (c == '\'')) {
+    if (c == '"' || c == '\'') {
       String value = parseQuoted(c);
 
       // skip over trailing white space
diff --git a/core/src/main/java/org/apache/calcite/avatica/DriverVersion.java b/core/src/main/java/org/apache/calcite/avatica/DriverVersion.java
index 7c97778b1..c84dbb0db 100644
--- a/core/src/main/java/org/apache/calcite/avatica/DriverVersion.java
+++ b/core/src/main/java/org/apache/calcite/avatica/DriverVersion.java
@@ -96,7 +96,7 @@ public class DriverVersion {
     int minorVersion = 0;
     int databaseMajorVersion = 0;
     int databaseMinorVersion = 0;
-    try (final InputStream inStream =
+    try (InputStream inStream =
           driverClass.getClassLoader().getResourceAsStream(resourceName)) {
       if (inStream != null) {
         final Properties properties = new Properties();
diff --git a/core/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java b/core/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
index fd57078f4..9e2e0fc94 100644
--- a/core/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
+++ b/core/src/main/java/org/apache/calcite/avatica/remote/JsonHandler.java
@@ -53,7 +53,7 @@ public class JsonHandler extends AbstractHandler<String> {
   }
 
   @Override Request decode(String request) throws IOException {
-    try (final Context ctx = serializationTimer.start()) {
+    try (Context ctx = serializationTimer.start()) {
       return MAPPER.readValue(request, Service.Request.class);
     }
   }
@@ -65,7 +65,7 @@ public class JsonHandler extends AbstractHandler<String> {
    * @return A JSON string.
    */
   @Override String encode(Response response) throws IOException {
-    try (final Context ctx = serializationTimer.start()) {
+    try (Context ctx = serializationTimer.start()) {
       final StringWriter w = new StringWriter();
       MAPPER.writeValue(w, response);
       return w.toString();
diff --git a/core/src/main/java/org/apache/calcite/avatica/remote/LocalService.java b/core/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
index df7ed4740..f125973d7 100644
--- a/core/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
+++ b/core/src/main/java/org/apache/calcite/avatica/remote/LocalService.java
@@ -194,7 +194,7 @@ public class LocalService implements Service {
   }
 
   public PrepareResponse apply(PrepareRequest request) {
-    try (final Context ignore = prepareTimer.start()) {
+    try (Context ignore = prepareTimer.start()) {
       final Meta.ConnectionHandle ch =
           new Meta.ConnectionHandle(request.connectionId);
       final Meta.StatementHandle h =
@@ -204,7 +204,7 @@ public class LocalService implements Service {
   }
 
   public ExecuteResponse apply(PrepareAndExecuteRequest request) {
-    try (final Context ignore = prepareAndExecuteTimer.start()) {
+    try (Context ignore = prepareAndExecuteTimer.start()) {
       final Meta.StatementHandle sh =
           new Meta.StatementHandle(request.connectionId, request.statementId, null);
       try {
@@ -255,7 +255,7 @@ public class LocalService implements Service {
   }
 
   public ExecuteResponse apply(ExecuteRequest request) {
-    try (final Context ignore = executeTimer.start()) {
+    try (Context ignore = executeTimer.start()) {
       try {
         final Meta.ExecuteResult executeResult = meta.execute(request.statementHandle,
             request.parameterValues, AvaticaUtils.toSaturatedInt(request.maxRowCount));
@@ -300,7 +300,7 @@ public class LocalService implements Service {
   }
 
   public ConnectionSyncResponse apply(ConnectionSyncRequest request) {
-    try (final Context ignore = connectionSyncTimer.start()) {
+    try (Context ignore = connectionSyncTimer.start()) {
       final Meta.ConnectionHandle ch =
           new Meta.ConnectionHandle(request.connectionId);
       final Meta.ConnectionProperties connProps =
@@ -332,7 +332,7 @@ public class LocalService implements Service {
   }
 
   public CommitResponse apply(CommitRequest request) {
-    try (final Context ignore = commitTimer.start()) {
+    try (Context ignore = commitTimer.start()) {
       meta.commit(new Meta.ConnectionHandle(request.connectionId));
 
       // If commit() errors, let the ErrorResponse be sent back via an uncaught Exception.
diff --git a/core/src/main/java/org/apache/calcite/avatica/remote/ProtobufHandler.java b/core/src/main/java/org/apache/calcite/avatica/remote/ProtobufHandler.java
index 89e380e6a..4ff9bb480 100644
--- a/core/src/main/java/org/apache/calcite/avatica/remote/ProtobufHandler.java
+++ b/core/src/main/java/org/apache/calcite/avatica/remote/ProtobufHandler.java
@@ -47,13 +47,13 @@ public class ProtobufHandler extends AbstractHandler<byte[]> {
   }
 
   @Override Service.Request decode(byte[] serializedRequest) throws IOException {
-    try (final Context ctx = serializationTimer.start()) {
+    try (Context ctx = serializationTimer.start()) {
       return translation.parseRequest(serializedRequest);
     }
   }
 
   @Override byte[] encode(Response response) throws IOException {
-    try (final Context ctx = serializationTimer.start()) {
+    try (Context ctx = serializationTimer.start()) {
       return translation.serializeResponse(response);
     }
   }
diff --git a/core/src/main/java/org/apache/calcite/avatica/remote/RemoteProtobufService.java b/core/src/main/java/org/apache/calcite/avatica/remote/RemoteProtobufService.java
index f62e994d5..bfa7b8ee4 100644
--- a/core/src/main/java/org/apache/calcite/avatica/remote/RemoteProtobufService.java
+++ b/core/src/main/java/org/apache/calcite/avatica/remote/RemoteProtobufService.java
@@ -16,11 +16,12 @@
  */
 package org.apache.calcite.avatica.remote;
 
+import org.apache.calcite.avatica.AvaticaUtils;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
-import java.nio.charset.StandardCharsets;
 
 /**
  * ProtobufService implementation that queries against a remote implementation, using
@@ -52,7 +53,7 @@ public class RemoteProtobufService extends ProtobufService {
       resp = translation.parseResponse(response);
     } catch (IOException e) {
       LOG.debug("Failed to deserialize reponse to {}. '{}'", request,
-          new String(response, StandardCharsets.UTF_8));
+          AvaticaUtils.newStringUtf8(response));
       // Not a protobuf that we could parse.
       throw new RuntimeException(e);
     }
diff --git a/core/src/main/java/org/apache/calcite/avatica/remote/RemoteService.java b/core/src/main/java/org/apache/calcite/avatica/remote/RemoteService.java
index d4828b558..dde27461a 100644
--- a/core/src/main/java/org/apache/calcite/avatica/remote/RemoteService.java
+++ b/core/src/main/java/org/apache/calcite/avatica/remote/RemoteService.java
@@ -16,6 +16,8 @@
  */
 package org.apache.calcite.avatica.remote;
 
+import org.apache.calcite.avatica.AvaticaUtils;
+
 import java.nio.charset.StandardCharsets;
 
 /**
@@ -32,7 +34,7 @@ public class RemoteService extends JsonService {
 
   @Override public String apply(String request) {
     byte[] response = client.send(request.getBytes(StandardCharsets.UTF_8));
-    return new String(response, StandardCharsets.UTF_8);
+    return AvaticaUtils.newStringUtf8(response);
   }
 }
 
diff --git a/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java b/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java
index fed875035..c580246ea 100644
--- a/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java
+++ b/core/src/main/java/org/apache/calcite/avatica/util/AbstractCursor.java
@@ -26,7 +26,6 @@ import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.net.URL;
-import java.nio.charset.StandardCharsets;
 import java.sql.Array;
 import java.sql.Blob;
 import java.sql.Clob;
@@ -852,7 +851,7 @@ public abstract class AbstractCursor implements Cursor {
         return null;
       }
       if (o instanceof byte[]) {
-        return new String((byte[]) o, StandardCharsets.UTF_8);
+        return AvaticaUtils.newStringUtf8((byte[]) o);
       } else if (o instanceof ByteString) {
         return ((ByteString) o).toString();
       }
@@ -901,7 +900,7 @@ public abstract class AbstractCursor implements Cursor {
         return null;
       }
       // Need to base64 decode the string.
-      return new String(bytes, StandardCharsets.UTF_8);
+      return AvaticaUtils.newStringUtf8(bytes);
     }
   }
 
diff --git a/core/src/main/java/org/apache/calcite/avatica/util/Base64.java b/core/src/main/java/org/apache/calcite/avatica/util/Base64.java
index 34cece4c2..ee5ba2355 100644
--- a/core/src/main/java/org/apache/calcite/avatica/util/Base64.java
+++ b/core/src/main/java/org/apache/calcite/avatica/util/Base64.java
@@ -46,7 +46,8 @@ import java.util.Locale;
  * might make a call like this:</p>
  *
  * <code>String encoded = Base64.encodeBytes( mybytes, Base64.GZIP | Base64.DO_BREAK_LINES );</code>
- * <p>to compress the data before encoding it and then making the output have newline characters.</p>
+ * <p>to compress the data before encoding it and
+ * then making the output have newline characters.</p>
  * <p>Also...</p>
  * <code>String encoded = Base64.encodeBytes( crazyString.getBytes() );</code>
  *
@@ -848,7 +849,8 @@ public class Base64
    * @throws IllegalArgumentException if source array, offset, or length are invalid
    * @since 2.0
    */
-  public static String encodeBytes( byte[] source, int off, int len, int options ) throws java.io.IOException {
+  public static String encodeBytes( byte[] source, int off, int len, int options )
+      throws java.io.IOException {
     byte[] encoded = encodeBytesToBytes( source, off, len, options );
 
     // Return value according to relevant encoding.
@@ -880,7 +882,8 @@ public class Base64
     try {
       encoded = encodeBytesToBytes( source, 0, source.length, Base64.NO_OPTIONS );
     } catch( java.io.IOException ex ) {
-      assert false : "IOExceptions only come from GZipping, which is turned off: " + ex.getMessage();
+      assert false : "IOExceptions only come from GZipping, which is turned off: " +
+          ex.getMessage();
     }
     return encoded;
   }
@@ -904,7 +907,8 @@ public class Base64
    * @throws IllegalArgumentException if source array, offset, or length are invalid
    * @since 2.3.1
    */
-  public static byte[] encodeBytesToBytes( byte[] source, int off, int len, int options ) throws java.io.IOException {
+  public static byte[] encodeBytesToBytes( byte[] source, int off, int len, int options )
+      throws java.io.IOException {
 
     if( source == null ){
       throw new NullPointerException( "Cannot serialize a null array." );
@@ -1063,11 +1067,13 @@ public class Base64
     }   // end if
     if( srcOffset < 0 || srcOffset + 3 >= source.length ){
       throw new IllegalArgumentException( String.format( Locale.ROOT,
-          "Source array with length %d cannot have offset of %d and still process four bytes.", source.length, srcOffset ) );
+          "Source array with length %d cannot have offset of %d and still process four bytes.",
+          source.length, srcOffset ) );
     }   // end if
     if( destOffset < 0 || destOffset +2 >= destination.length ){
       throw new IllegalArgumentException( String.format( Locale.ROOT,
-          "Destination array with length %d cannot have offset of %d and still store three bytes.", destination.length, destOffset ) );
+          "Destination array with length %d cannot have offset of %d and still store three bytes.",
+          destination.length, destOffset ) );
     }   // end if
 
 
@@ -1144,7 +1150,8 @@ public class Base64
 //        try {
     decoded = decode( source, 0, source.length, Base64.NO_OPTIONS );
 //        } catch( java.io.IOException ex ) {
-//            assert false : "IOExceptions only come from GZipping, which is turned off: " + ex.getMessage();
+//            assert false : "IOExceptions only come from GZipping, which is turned off: " +
+//                ex.getMessage();
 //        }
     return decoded;
   }
@@ -1177,14 +1184,16 @@ public class Base64
     }   // end if
     if( off < 0 || off + len > source.length ){
       throw new IllegalArgumentException( String.format( Locale.ROOT,
-          "Source array with length %d cannot have offset of %d and process %d bytes.", source.length, off, len ) );
+          "Source array with length %d cannot have offset of %d and process %d bytes.",
+          source.length, off, len ) );
     }   // end if
 
     if( len == 0 ){
       return new byte[0];
     }else if( len < 4 ){
       throw new IllegalArgumentException(
-          "Base64-encoded string must have at least four characters, but length specified was " + len );
+          "Base64-encoded string must have at least four characters, but length specified was " +
+              len );
     }   // end if
 
     byte[] DECODABET = getDecodabet( options );
@@ -1512,7 +1521,8 @@ public class Base64
       // Check for size of file
       if( file.length() > Integer.MAX_VALUE )
       {
-        throw new java.io.IOException( "File is too big for this convenience method (" + file.length() + " bytes)." );
+        throw new java.io.IOException( "File is too big for this convenience method (" +
+            file.length() + " bytes)." );
       }   // end if: file too big for int index
       buffer = new byte[ (int)file.length() ];
 
@@ -1566,7 +1576,8 @@ public class Base64
     {
       // Set up some useful variables
       java.io.File file = new java.io.File( filename );
-      byte[] buffer = new byte[ Math.max((int)(file.length() * 1.4+1),40) ]; // Need max() for math on small files (v2.2.1); Need +1 for a few corner cases (v2.3.5)
+      byte[] buffer = new byte[ Math.max((int)(file.length() * 1.4+1),40) ];
+      // Need max() for math on small files (v2.2.1); Need +1 for a few corner cases (v2.3.5)
       int length   = 0;
       int numBytes = 0;
 
diff --git a/core/src/main/java/org/apache/calcite/avatica/util/ByteString.java b/core/src/main/java/org/apache/calcite/avatica/util/ByteString.java
index 2bd24e04c..86b934a31 100644
--- a/core/src/main/java/org/apache/calcite/avatica/util/ByteString.java
+++ b/core/src/main/java/org/apache/calcite/avatica/util/ByteString.java
@@ -134,7 +134,7 @@ public class ByteString implements Comparable<ByteString>, Serializable {
     default:
       throw new IllegalArgumentException("bad base " + base);
     }
-    return new String(chars, 0, j);
+    return String.valueOf(chars, 0, j);
   }
 
   /**
diff --git a/core/src/main/java/org/apache/calcite/avatica/util/Cursor.java b/core/src/main/java/org/apache/calcite/avatica/util/Cursor.java
index 7ba605dac..9eeb2df7c 100644
--- a/core/src/main/java/org/apache/calcite/avatica/util/Cursor.java
+++ b/core/src/main/java/org/apache/calcite/avatica/util/Cursor.java
@@ -78,7 +78,7 @@ public interface Cursor extends AutoCloseable {
   /**
    * Accessor of a column value.
    */
-  public interface Accessor {
+  interface Accessor {
     boolean wasNull() throws SQLException;
 
     String getString() throws SQLException;
diff --git a/core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java b/core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java
index a4fdb7f0a..b342c94b7 100644
--- a/core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java
+++ b/core/src/main/java/org/apache/calcite/avatica/util/DateTimeUtils.java
@@ -230,7 +230,7 @@ public class DateTimeUtils {
         }
         NumberFormat nf = NumberFormat.getIntegerInstance(Locale.ROOT);
         Number num = nf.parse(s, pp);
-        if ((num == null) || (pp.getIndex() != s.length())) {
+        if (num == null || pp.getIndex() != s.length()) {
           // Invalid decimal portion
           return null;
         }
@@ -1119,7 +1119,7 @@ public class DateTimeUtils {
   public static long floorDiv(long x, long y) {
     long r = x / y;
     // if the signs are different and modulo not zero, round down
-    if ((x ^ y) < 0 && (r * y != x)) {
+    if ((x ^ y) < 0 && r * y != x) {
       r--;
     }
     return r;
diff --git a/core/src/main/java/org/apache/calcite/avatica/util/Spaces.java b/core/src/main/java/org/apache/calcite/avatica/util/Spaces.java
index 64694003c..73f70949e 100644
--- a/core/src/main/java/org/apache/calcite/avatica/util/Spaces.java
+++ b/core/src/main/java/org/apache/calcite/avatica/util/Spaces.java
@@ -171,7 +171,7 @@ public class Spaces {
       addAll(
           new AbstractList<String>() {
             public String get(int index) {
-              return new String(chars, 0, offset + index);
+              return String.valueOf(chars, 0, offset + index);
             }
 
             public int size() {
diff --git a/core/src/test/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImplTest.java b/core/src/test/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImplTest.java
index 8b2a34b36..d4dacdf44 100644
--- a/core/src/test/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImplTest.java
+++ b/core/src/test/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImplTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.calcite.avatica.remote;
 
+import org.apache.calcite.avatica.AvaticaUtils;
+
 import org.apache.hc.client5.http.classic.methods.HttpPost;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
 import org.apache.hc.client5.http.protocol.HttpClientContext;
@@ -72,7 +74,7 @@ public class AvaticaCommonsHttpClientImplTest {
     when(goodResponse.getEntity()).thenReturn(responseEntity);
 
     byte[] responseBytes = client.send(requestBytes);
-    assertEquals("success", new String(responseBytes, UTF_8));
+    assertEquals("success", AvaticaUtils.newStringUtf8(responseBytes));
   }
 
   @Test public void testRetryOnMissingHttpResponse() throws Exception {
@@ -104,7 +106,7 @@ public class AvaticaCommonsHttpClientImplTest {
     when(goodResponse.getEntity()).thenReturn(responseEntity);
 
     byte[] responseBytes = client.send(requestBytes);
-    assertEquals("success", new String(responseBytes, UTF_8));
+    assertEquals("success", AvaticaUtils.newStringUtf8(responseBytes));
   }
 
 }
diff --git a/core/src/test/java/org/apache/calcite/avatica/remote/TypedValueTest.java b/core/src/test/java/org/apache/calcite/avatica/remote/TypedValueTest.java
index 50d492efe..3c0575e10 100644
--- a/core/src/test/java/org/apache/calcite/avatica/remote/TypedValueTest.java
+++ b/core/src/test/java/org/apache/calcite/avatica/remote/TypedValueTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.calcite.avatica.remote;
 
+import org.apache.calcite.avatica.AvaticaUtils;
 import org.apache.calcite.avatica.ColumnMetaData;
 import org.apache.calcite.avatica.ColumnMetaData.Rep;
 import org.apache.calcite.avatica.ColumnMetaData.ScalarType;
@@ -180,7 +181,7 @@ public class TypedValueTest {
     final byte[] b64Bytes = Base64.encodeBytes(bytes).getBytes(UTF_8);
     TypedValue tv = TypedValue.ofLocal(Rep.BYTE_STRING, new ByteString(bytes));
     // JSON encodes it as base64
-    assertEquals(new String(b64Bytes, UTF_8), tv.value);
+    assertEquals(AvaticaUtils.newStringUtf8(b64Bytes), tv.value);
 
     // Get the protobuf variant
     Common.TypedValue protoTv = tv.toProto();
@@ -193,7 +194,7 @@ public class TypedValueTest {
     assertArrayEquals(bytes, protoByteString.toByteArray());
 
     // We should have the b64 string as a backwards compatibility feature
-    assertEquals(new String(b64Bytes, UTF_8),
+    assertEquals(AvaticaUtils.newStringUtf8(b64Bytes),
         protoTv.getStringValue());
   }
 
diff --git a/gradle.properties b/gradle.properties
index 706ce898a..88627529b 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -50,10 +50,8 @@ org.owasp.dependencycheck.version=5.2.2
 
 # Tools
 checkerframework.version=3.10.0
-checkstyle.version=6.18
+checkstyle.version=10.3.2
 spotbugs.version=3.1.11
-# For Checkstyle
-hydromatic-toolbox.version=0.3
 
 asm.version=7.1
 bouncycastle.version=1.60
diff --git a/metrics/src/main/java/org/apache/calcite/avatica/metrics/Timer.java b/metrics/src/main/java/org/apache/calcite/avatica/metrics/Timer.java
index be792cc70..29d29ad1d 100644
--- a/metrics/src/main/java/org/apache/calcite/avatica/metrics/Timer.java
+++ b/metrics/src/main/java/org/apache/calcite/avatica/metrics/Timer.java
@@ -26,7 +26,7 @@ public interface Timer extends Metric {
   /**
    * A object that tracks an active timing state.
    */
-  public interface Context extends AutoCloseable {
+  interface Context extends AutoCloseable {
     /**
      * Stops the timer.
      */
diff --git a/server/src/main/java/org/apache/calcite/avatica/server/AvaticaJsonHandler.java b/server/src/main/java/org/apache/calcite/avatica/server/AvaticaJsonHandler.java
index 94bee6a6e..709b2d80b 100644
--- a/server/src/main/java/org/apache/calcite/avatica/server/AvaticaJsonHandler.java
+++ b/server/src/main/java/org/apache/calcite/avatica/server/AvaticaJsonHandler.java
@@ -88,7 +88,7 @@ public class AvaticaJsonHandler extends AbstractAvaticaHandler {
   public void handle(String target, Request baseRequest,
       HttpServletRequest request, HttpServletResponse response)
       throws IOException, ServletException {
-    try (final Context ctx = requestTimer.start()) {
+    try (Context ctx = requestTimer.start()) {
       if (!isUserPermitted(serverConfig, baseRequest, request, response)) {
         LOG.debug("HTTP request from {} is unauthenticated and authentication is required",
             request.getRemoteAddr());
@@ -110,7 +110,7 @@ public class AvaticaJsonHandler extends AbstractAvaticaHandler {
             if (encoding == null) {
               encoding = "UTF-8";
             }
-            rawRequest = new String(bytes, encoding);
+            rawRequest = AvaticaUtils.newString(bytes, encoding);
           } finally {
             // Reset the offset into the buffer after we're done
             buffer.reset();
diff --git a/server/src/main/java/org/apache/calcite/avatica/server/AvaticaProtobufHandler.java b/server/src/main/java/org/apache/calcite/avatica/server/AvaticaProtobufHandler.java
index 16e27ffae..9cd02a772 100644
--- a/server/src/main/java/org/apache/calcite/avatica/server/AvaticaProtobufHandler.java
+++ b/server/src/main/java/org/apache/calcite/avatica/server/AvaticaProtobufHandler.java
@@ -90,7 +90,7 @@ public class AvaticaProtobufHandler extends AbstractAvaticaHandler {
   public void handle(String target, Request baseRequest,
       HttpServletRequest request, HttpServletResponse response)
       throws IOException, ServletException {
-    try (final Context ctx = this.requestTimer.start()) {
+    try (Context ctx = this.requestTimer.start()) {
       if (!request.getMethod().equals("POST")) {
         response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
         response.getOutputStream().write(
diff --git a/server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java b/server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
index 525a1e72b..61c4b3846 100644
--- a/server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
+++ b/server/src/test/java/org/apache/calcite/avatica/RemoteDriverTest.java
@@ -579,7 +579,7 @@ public class RemoteDriverTest {
     assertEquals(2, metaData.getColumnCount());
     assertEquals("C1", metaData.getColumnName(1));
     assertEquals("C2", metaData.getColumnName(2));
-    for (int i = 0; i < maxRowCount || (maxRowCount == 0 && i < 3); i++) {
+    for (int i = 0; i < maxRowCount || maxRowCount == 0 && i < 3; i++) {
       assertTrue(resultSet.next());
     }
     assertFalse(resultSet.next());
@@ -1334,7 +1334,7 @@ public class RemoteDriverTest {
             + " (id varchar(1) not null, col1 varchar(1) not null)";
         assertFalse(stmt.execute(sql));
       }
-      try (final PreparedStatement pstmt =
+      try (PreparedStatement pstmt =
           conn.prepareStatement("INSERT INTO " + tableName + " values(?, ?)")) {
         pstmt.setString(1, "a");
         pstmt.setString(2, "b");
diff --git a/server/src/test/java/org/apache/calcite/avatica/remote/AlternatingRemoteMetaTest.java b/server/src/test/java/org/apache/calcite/avatica/remote/AlternatingRemoteMetaTest.java
index 849e6c547..41c84fe3d 100644
--- a/server/src/test/java/org/apache/calcite/avatica/remote/AlternatingRemoteMetaTest.java
+++ b/server/src/test/java/org/apache/calcite/avatica/remote/AlternatingRemoteMetaTest.java
@@ -321,7 +321,7 @@ public class AlternatingRemoteMetaTest {
       final Map<String, ConnectionPropertiesImpl> m = ((RemoteMeta) getMeta(conn)).propsMap;
       assertFalse("remote connection map should start ignorant", m.containsKey(id));
       // force creating a connection object on the remote side.
-      try (final Statement stmt = conn.createStatement()) {
+      try (Statement stmt = conn.createStatement()) {
         assertTrue("creating a statement starts a local object.", m.containsKey(id));
         assertTrue(stmt.execute("select count(1) from EMP"));
       }
@@ -338,7 +338,7 @@ public class AlternatingRemoteMetaTest {
           defaultAutoCommit, remoteConn.getAutoCommit());
 
       // further interaction with the connection will force a sync
-      try (final Statement stmt = conn.createStatement()) {
+      try (Statement stmt = conn.createStatement()) {
         assertEquals(!defaultAutoCommit, remoteConn.getAutoCommit());
         assertFalse("local values should be clean", m.get(id).isDirty());
       }
diff --git a/server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java b/server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
index be657f04f..0d34fb433 100644
--- a/server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
+++ b/server/src/test/java/org/apache/calcite/avatica/remote/RemoteMetaTest.java
@@ -257,7 +257,7 @@ public class RemoteMetaTest {
       final Map<String, ConnectionPropertiesImpl> m = ((RemoteMeta) getMeta(conn)).propsMap;
       assertFalse("remote connection map should start ignorant", m.containsKey(id));
       // force creating a connection object on the remote side.
-      try (final Statement stmt = conn.createStatement()) {
+      try (Statement stmt = conn.createStatement()) {
         assertTrue("creating a statement starts a local object.", m.containsKey(id));
         assertTrue(stmt.execute("select count(1) from EMP"));
       }
@@ -274,7 +274,7 @@ public class RemoteMetaTest {
           defaultAutoCommit, remoteConn.getAutoCommit());
 
       // further interaction with the connection will force a sync
-      try (final Statement stmt = conn.createStatement()) {
+      try (Statement stmt = conn.createStatement()) {
         assertEquals(!defaultAutoCommit, remoteConn.getAutoCommit());
         assertFalse("local values should be clean", m.get(id).isDirty());
       }
@@ -391,8 +391,8 @@ public class RemoteMetaTest {
   @Test public void testExceptionPropagation() throws Exception {
     final String sql = "SELECT * from EMP LIMIT FOOBARBAZ";
     ConnectionSpec.getDatabaseLock().lock();
-    try (final AvaticaConnection conn = (AvaticaConnection) DriverManager.getConnection(url);
-        final Statement stmt = conn.createStatement()) {
+    try (AvaticaConnection conn = (AvaticaConnection) DriverManager.getConnection(url);
+        Statement stmt = conn.createStatement()) {
       try {
         // invalid SQL
         stmt.execute(sql);
@@ -459,11 +459,11 @@ public class RemoteMetaTest {
     final String tableName = "testbinaryandstrs";
     final byte[] data = "asdf".getBytes(StandardCharsets.UTF_8);
     ConnectionSpec.getDatabaseLock().lock();
-    try (final Connection conn = DriverManager.getConnection(url);
-        final Statement stmt = conn.createStatement()) {
+    try (Connection conn = DriverManager.getConnection(url);
+        Statement stmt = conn.createStatement()) {
       assertFalse(stmt.execute("DROP TABLE IF EXISTS " + tableName));
       assertFalse(stmt.execute("CREATE TABLE " + tableName + "(id int, bin BINARY(4))"));
-      try (final PreparedStatement prepStmt = conn.prepareStatement(
+      try (PreparedStatement prepStmt = conn.prepareStatement(
           "INSERT INTO " + tableName + " values(1, ?)")) {
         prepStmt.setBytes(1, data);
         assertFalse(prepStmt.execute());
@@ -475,7 +475,7 @@ public class RemoteMetaTest {
         assertArrayEquals("Bytes were " + Arrays.toString(results.getBytes(2)),
             data, results.getBytes(2));
         // as should string
-        assertEquals(new String(data, StandardCharsets.UTF_8), results.getString(2));
+        assertEquals(AvaticaUtils.newStringUtf8(data), results.getString(2));
         assertFalse(results.next());
       }
     } finally {
@@ -552,8 +552,8 @@ public class RemoteMetaTest {
     final String productTable = "commitrollback_products";
     final String salesTable = "commitrollback_sales";
     ConnectionSpec.getDatabaseLock().lock();
-    try (final Connection conn = DriverManager.getConnection(url);
-        final Statement stmt = conn.createStatement()) {
+    try (Connection conn = DriverManager.getConnection(url);
+        Statement stmt = conn.createStatement()) {
       assertFalse(stmt.execute("DROP TABLE IF EXISTS " + productTable));
       assertFalse(
           stmt.execute(
@@ -652,7 +652,7 @@ public class RemoteMetaTest {
 
   @Test public void getAvaticaVersion() throws Exception {
     ConnectionSpec.getDatabaseLock().lock();
-    try (final Connection conn = DriverManager.getConnection(url)) {
+    try (Connection conn = DriverManager.getConnection(url)) {
       DatabaseMetaData metadata = conn.getMetaData();
       assertTrue("DatabaseMetaData is not an instance of AvaticaDatabaseMetaData",
           metadata instanceof AvaticaSpecificDatabaseMetaData);
@@ -713,7 +713,7 @@ public class RemoteMetaTest {
     final Properties props = new Properties();
     props.setProperty("foo", "bar");
     final Properties originalProps = (Properties) props.clone();
-    try (final Connection conn = DriverManager.getConnection(url, props)) {
+    try (Connection conn = DriverManager.getConnection(url, props)) {
       // The contents of the two properties objects should not have changed after connecting.
       assertEquals(props, originalProps);
     }
diff --git a/server/src/test/java/org/apache/calcite/avatica/server/AbstractAvaticaHandlerTest.java b/server/src/test/java/org/apache/calcite/avatica/server/AbstractAvaticaHandlerTest.java
index f8e79ae98..caf0fb3a0 100644
--- a/server/src/test/java/org/apache/calcite/avatica/server/AbstractAvaticaHandlerTest.java
+++ b/server/src/test/java/org/apache/calcite/avatica/server/AbstractAvaticaHandlerTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.calcite.avatica.server;
 
+import org.apache.calcite.avatica.AvaticaUtils;
 import org.apache.calcite.avatica.remote.AuthenticationType;
 
 import org.eclipse.jetty.server.Request;
@@ -25,7 +26,6 @@ import org.junit.Before;
 import org.junit.Test;
 
 import java.net.HttpURLConnection;
-import java.nio.charset.StandardCharsets;
 import javax.servlet.ServletInputStream;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
@@ -84,7 +84,7 @@ public class AbstractAvaticaHandlerTest {
       }
 
       @Override public boolean matches(Object item) {
-        String msg = new String((byte[]) item, StandardCharsets.UTF_8);
+        String msg = AvaticaUtils.newStringUtf8((byte[]) item);
         return msg.contains("User is not authenticated");
       }
 
diff --git a/server/src/test/java/org/apache/calcite/avatica/server/HttpServerSpnegoWithoutJaasTest.java b/server/src/test/java/org/apache/calcite/avatica/server/HttpServerSpnegoWithoutJaasTest.java
index 025e2046f..85d9f60c5 100644
--- a/server/src/test/java/org/apache/calcite/avatica/server/HttpServerSpnegoWithoutJaasTest.java
+++ b/server/src/test/java/org/apache/calcite/avatica/server/HttpServerSpnegoWithoutJaasTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.calcite.avatica.server;
 
+import org.apache.calcite.avatica.AvaticaUtils;
 import org.apache.calcite.avatica.ConnectionConfig;
 import org.apache.calcite.avatica.ConnectionConfigImpl;
 import org.apache.calcite.avatica.SpnegoTestUtil;
@@ -233,7 +234,7 @@ public class HttpServerSpnegoWithoutJaasTest {
     // We should get a response which is "OK" with our client's name
     assertNotNull(response);
     assertEquals("OK " + SpnegoTestUtil.CLIENT_NAME,
-        new String(response, StandardCharsets.UTF_8));
+        AvaticaUtils.newStringUtf8(response));
   }
 }
 
diff --git a/src/main/config/checkstyle/checker.xml b/src/main/config/checkstyle/checker.xml
index 4035432b8..8903218c8 100644
--- a/src/main/config/checkstyle/checker.xml
+++ b/src/main/config/checkstyle/checker.xml
@@ -31,6 +31,7 @@
 <!-- Calcite customization of default Checkstyle behavior -->
 <module name="Checker">
   <property name="localeLanguage" value="en"/>
+  <property name="cacheFile" value="target/checkstyle-cachefile"/>
 
   <!-- Checks for Javadoc comments (checker).           -->
   <!-- See http://checkstyle.sf.net/config_javadoc.html -->
@@ -38,7 +39,6 @@
   <module name="JavadocPackage"/>
 
   <module name="TreeWalker">
-    <property name="cacheFile" value="target/checkstyle-cachefile"/>
 
     <!-- Checks for blocks. You know, those {}'s         -->
     <!-- See http://checkstyle.sf.net/config_blocks.html -->
@@ -191,14 +191,6 @@
       <property name="message" value="C-style comment"/>
     </module>
 
-    <!-- Checks for Size Violations.                    -->
-    <!-- See http://checkstyle.sf.net/config_sizes.html -->
-    <!-- Lines cannot exceed 80 chars, except if they are hyperlinks
-         or strings (possibly preceded by '+' and followed by say '),'. -->
-    <module name="LineLength">
-      <property name="max" value="100"/>
-      <property name="ignorePattern" value="^import|@see|@link|@BaseMessage|href|^[ +]*&quot;.*&quot;[);,]*$"/>
-    </module>
       <!-- Over time, we will revise this down -->
     <module name="MethodLength">
       <property name="max" value="390"/>
@@ -226,30 +218,35 @@
       <!-- No extra whitespace around types -->
     <module name="GenericWhitespace"/>
 
-    <!-- Required for SuppressionCommentFilter below -->
-    <module name="FileContentsHolder"/>
-  </module>
+    <!-- Setup special comments to suppress specific checks from source files -->
+    <module name="SuppressionCommentFilter">
+      <property name="offCommentFormat" value="CHECKSTYLE\: stop ([\w\|]+)"/>
+      <property name="onCommentFormat"  value="CHECKSTYLE\: resume ([\w\|]+)"/>
+      <property name="checkFormat"      value="$1"/>
+    </module>
 
-  <!-- Setup special comments to suppress specific checks from source files -->
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="CHECKSTYLE\: stop ([\w\|]+)"/>
-    <property name="onCommentFormat"  value="CHECKSTYLE\: resume ([\w\|]+)"/>
-    <property name="checkFormat"      value="$1"/>
-  </module>
+    <!-- Turn off all checks between OFF and ON -->
+    <module name="SuppressionCommentFilter">
+      <property name="offCommentFormat" value="CHECKSTYLE\: OFF"/>
+      <property name="onCommentFormat"  value="CHECKSTYLE\: ON"/>
+    </module>
 
-  <!-- Turn off all checks between OFF and ON -->
-  <module name="SuppressionCommentFilter">
-    <property name="offCommentFormat" value="CHECKSTYLE\: OFF"/>
-    <property name="onCommentFormat"  value="CHECKSTYLE\: ON"/>
-  </module>
+    <!-- Turn off checks for the next N lines. -->
+    <module name="SuppressWithNearbyCommentFilter">
+      <property name="commentFormat" value="CHECKSTYLE: +IGNORE (\d+)"/>
+      <property name="influenceFormat" value="$1"/>
+    </module>
 
-  <!-- Turn off checks for the next N lines. -->
-  <module name="SuppressWithNearbyCommentFilter">
-    <property name="commentFormat" value="CHECKSTYLE: +IGNORE (\d+)"/>
-    <property name="influenceFormat" value="$1"/>
+    <!-- Required for SuppressionCommentFilter below -->
+  </module>
+  <!-- Checks for Size Violations.                    -->
+  <!-- See http://checkstyle.sf.net/config_sizes.html -->
+  <!-- Lines cannot exceed 80 chars, except if they are hyperlinks
+    or strings (possibly preceded by '+' and followed by say '),'. -->
+  <module name="LineLength">
+    <property name="max" value="100"/>
+    <property name="ignorePattern" value="^import|@see|@link|@BaseMessage|href|^[ +]*&quot;.*&quot;[);,]*$"/>
   </module>
-
-  <module name="net.hydromatic.toolbox.checkstyle.HydromaticFileSetCheck"/>
 
   <module name="SuppressionFilter">
     <property name="file" value="${checkstyle.suppressions.file}"/>