Skip to content

Commit

Permalink
Misc code cleanup/suppress Sonar warnings
Browse files Browse the repository at this point in the history
  • Loading branch information
mrotteveel committed Jan 15, 2024
1 parent 4064ca1 commit 37944fb
Show file tree
Hide file tree
Showing 136 changed files with 1,150 additions and 945 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ private MessageConverter() {
// no instances
}

@SuppressWarnings("java:S127")
static String toJaybirdMessageFormat(String fbMessage) {
char[] chars = fbMessage.toCharArray();

Expand All @@ -41,21 +42,16 @@ static String toJaybirdMessageFormat(String fbMessage) {
i++;

switch (chars[i]) {
case 's':
case 'd':
sb.append('{').append(counter++).append('}');
break;
case 'l':
case 's', 'd' -> sb.append('{').append(counter++).append('}');
case 'l' -> {
i++;
if (chars[i] == 'd') {
sb.append('{').append(counter++).append('}');
} else {
sb.append("%l").append(chars[i]);
}
break;
default:
sb.append('%').append(chars[i]);
break;
}
default -> sb.append('%').append(chars[i]);
}
} else if (chars[i] == '@') {
i++;
Expand Down Expand Up @@ -93,38 +89,30 @@ static String toSqlState(String sqlStateClass, String sqlStateSubClass) {
* message to unescape
* @return unescaped message
*/
@SuppressWarnings("java:S127")
static String unescapeSource(String message) {
int length = message.length();
StringBuilder sb = new StringBuilder(length);
var sb = new StringBuilder(length);
for (int x = 0; x < length; x++) {
char ch = message.charAt(x);
if (ch == '\\' && x + 1 < length) {
// Unconditionally increment position, we restore this in the default of the switch
x = x + 1;
char nextCh = message.charAt(x);
char nextCh = message.charAt(++x);
switch (nextCh) {
case '\\':
case '"':
sb.append(nextCh);
continue;
case 't':
sb.append('\t');
continue;
case 'n':
sb.append('\n');
continue;
case 'r':
sb.append('\r');
continue;
case 'f':
sb.append('\f');
continue;
default:
case '\\', '"' -> sb.append(nextCh);
case 't' -> sb.append('\t');
case 'n' -> sb.append('\n');
case 'r' -> sb.append('\r');
case 'f' -> sb.append('\f');
default -> {
// Restore position
x = x - 1;
x--;
sb.append(ch);
}
}
} else {
sb.append(ch);
}
sb.append(ch);
}
return sb.toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
* @author Mark Rotteveel
* @since 5
*/
@SuppressWarnings("java:S106")
public class MessageExtractor {

private final Path messageRoot;
Expand Down Expand Up @@ -74,6 +75,7 @@ private void parseFile(Path messageFile) {
}
}

@SuppressWarnings("java:S127")
public static void main(String[] args) {
String messageRootString = null;
OutputFormat outputFormat = OutputFormat.SINGLE;
Expand All @@ -96,7 +98,6 @@ public static void main(String[] args) {
System.err.println("Option --format expects a value; using default");
}
}

}
if (messageRootString == null || messageRootString.isEmpty()) {
System.err.println("Option --message-root <path> with path the Firebird error messages files required");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,32 +129,22 @@ final void store(Map<Integer, String> map, BufferedWriter writer) throws IOExcep

private static String saveConvert(String theString, boolean escapeSpace) {
int len = theString.length();
StringBuilder outBuffer = new StringBuilder(len * 2);
var outBuffer = new StringBuilder(len * 2);

for (int x = 0; x < len; x++) {
char aChar = theString.charAt(x);
switch (aChar) {
case ' ':
case ' ' -> {
if (x == 0 || escapeSpace) outBuffer.append('\\');

outBuffer.append(' ');
break;
case '\\':
outBuffer.append('\\').append('\\');
break;
case '\t':
outBuffer.append('\\').append('t');
break;
case '\n':
outBuffer.append('\\').append('n');
break;
case '\r':
outBuffer.append('\\').append('r');
break;
case '\f':
outBuffer.append('\\').append('f');
break;
default:
}
case '\\' -> outBuffer.append('\\').append('\\');
case '\t' -> outBuffer.append('\\').append('t');
case '\n' -> outBuffer.append('\\').append('n');
case '\r' -> outBuffer.append('\\').append('r');
case '\f' -> outBuffer.append('\\').append('f');
default -> {
if ((aChar < 0x0020) || (aChar > 0x007e)) {
outBuffer.append('\\').append('u')
.append(toHex(aChar >> 12))
Expand All @@ -168,6 +158,7 @@ private static String saveConvert(String theString, boolean escapeSpace) {
outBuffer.append(aChar);
}
}
}
}
return outBuffer.toString();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
*
* @author Mark Rotteveel
*/
enum OutputFormat {
public enum OutputFormat {

/**
* One file for messages, one file for SQLSTATE.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
*/
final class FbClientResource extends NativeResourceTracker.NativeResource {

@SuppressWarnings("java:S3077")
private volatile FbClientLibrary library;
private final AbstractNativeDatabaseFactory owner;
private final Cleaner.Cleanable cleanable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ protected int get(final byte[] b, final int off, final int len, final int minLen
}
}

private int getBlobBufferSize() throws SQLException {
private int getBlobBufferSize() {
return getDatabase().getConnectionProperties().getBlobBufferSize();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,43 +100,35 @@ protected void processStatusVector(ISC_STATUS[] statusVector, WarningMessageCall
while (vectorIndex < statusVector.length) {
int arg = statusVector[vectorIndex++].intValue();
switch (arg) {
case isc_arg_gds:
case isc_arg_gds: {
int errorCode = statusVector[vectorIndex++].intValue();
if (errorCode != 0) {
builder.exception(errorCode);
}
break;
}
case isc_arg_warning: {
int errorCode = statusVector[vectorIndex++].intValue();
if (errorCode != 0) {
if (arg == isc_arg_gds) {
builder.exception(errorCode);
} else {
builder.warning(errorCode);
}
builder.warning(errorCode);
}
break;
}
case isc_arg_interpreted:
case isc_arg_string:
case isc_arg_string: {
String stringValue = getString(statusVector[vectorIndex++]);
if (stringValue == null) break processingLoop;
builder.messageParameter(stringValue);
break;
}
case isc_arg_sql_state: {
long stringPointerAddress = statusVector[vectorIndex++].longValue();
if (stringPointerAddress == 0L) {
System.getLogger(getClass().getName()).log(WARNING,
"Received NULL pointer address for isc_arg_interpreted, isc_arg_string or isc_arg_sql_state");
break processingLoop;
}
var stringPointer = new Pointer(stringPointerAddress);
String stringValue = stringPointer.getString(0, getEncodingDefinition().getJavaEncodingName());
if (arg == isc_arg_sql_state) {
builder.sqlState(stringValue);
} else {
builder.messageParameter(stringValue);
}
String stringValue = getString(statusVector[vectorIndex++]);
if (stringValue == null) break processingLoop;
builder.sqlState(stringValue);
break;
}
case isc_arg_cstring: {
int stringLength = statusVector[vectorIndex++].intValue();
long cStringPointerAddress = statusVector[vectorIndex++].longValue();
var cStringPointer = new Pointer(cStringPointerAddress);
byte[] stringData = cStringPointer.getByteArray(0, stringLength);
String cStringValue = getEncoding().decodeFromCharset(stringData);
builder.messageParameter(cStringValue);
builder.messageParameter(getCString(statusVector[vectorIndex++], statusVector[vectorIndex++]));
break;
}
case isc_arg_end:
Expand All @@ -160,6 +152,23 @@ protected void processStatusVector(ISC_STATUS[] statusVector, WarningMessageCall
}
}

private String getCString(ISC_STATUS lengthStatus, ISC_STATUS pointerStatus) {
var cStringPointer = new Pointer(pointerStatus.longValue());
byte[] stringData = cStringPointer.getByteArray(0, lengthStatus.intValue());
return getEncoding().decodeFromCharset(stringData);
}

private String getString(ISC_STATUS iscStatus) {
long stringPointerAddress = iscStatus.longValue();
if (stringPointerAddress == 0L) {
System.getLogger(getClass().getName()).log(WARNING,
"Received NULL pointer address for isc_arg_interpreted, isc_arg_string or isc_arg_sql_state");
return null;
}
var stringPointer = new Pointer(stringPointerAddress);
return stringPointer.getString(0, getEncodingDefinition().getJavaEncodingName());
}

final DatatypeCoder createDatatypeCoder() {
if (BIG_ENDIAN) {
return BigEndianDatatypeCoder.forEncodingFactory(getEncodingFactory());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ public final class JnaEventHandle extends AbstractEventHandle {
Cleaners.getJbCleaner().register(this, new CleanupAction(eventBuffer, resultBuffer));
}

@SuppressWarnings("java:S1185")
@Override
protected void setEventCount(int eventCount) {
super.setEventCount(eventCount);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,29 +134,8 @@ public void attach() throws SQLException {
if (isAttached()) {
throw new SQLException("Already attached to a service");
}
final ServiceParameterBuffer spb = PARAMETER_CONVERTER.toServiceParameterBuffer(connection);
final byte[] serviceName = getEncoding().encodeToCharset(connection.getAttachUrl());
final byte[] spbArray = spb.toBytesWithType();

try (LockCloseable ignored = withLock()) {
try {
clientLibrary.isc_service_attach(statusVector, (short) serviceName.length, serviceName, handle,
(short) spbArray.length, spbArray);
if (handle.getValue() != 0) {
cleanable = Cleaners.getJbCleaner().register(this, new CleanupAction(handle, clientLibrary));
}
processStatusVector();
} catch (SQLException ex) {
safelyDetach();
throw ex;
} catch (Exception ex) {
safelyDetach();
// TODO Replace with specific error (eg native client error)
throw FbExceptionBuilder.forException(ISCConstants.isc_network_error)
.messageParameter(connection.getAttachUrl())
.cause(ex)
.toSQLException();
}
attachImpl();
setAttached();
afterAttachActions();
}
Expand All @@ -166,6 +145,29 @@ public void attach() throws SQLException {
}
}

private void attachImpl() throws SQLException {
try {
byte[] spbArray = PARAMETER_CONVERTER.toServiceParameterBuffer(connection).toBytesWithType();
byte[] serviceName = getEncoding().encodeToCharset(connection.getAttachUrl());
clientLibrary.isc_service_attach(statusVector, (short) serviceName.length, serviceName, handle,
(short) spbArray.length, spbArray);
if (handle.getValue() != 0) {
cleanable = Cleaners.getJbCleaner().register(this, new CleanupAction(handle, clientLibrary));
}
processStatusVector();
} catch (SQLException ex) {
safelyDetach();
throw ex;
} catch (Exception ex) {
safelyDetach();
// TODO Replace with specific error (eg native client error)
throw FbExceptionBuilder.forException(ISCConstants.isc_network_error)
.messageParameter(connection.getAttachUrl())
.cause(ex)
.toSQLException();
}
}

/**
* Additional tasks to execute directly after attach operation.
* <p>
Expand Down
Loading

0 comments on commit 37944fb

Please sign in to comment.