diff --git a/common/src/testing/java/google/registry/testing/truth/TextDiffSubject.java b/common/src/testing/java/google/registry/testing/truth/TextDiffSubject.java index a30c0658a..6fa21df35 100644 --- a/common/src/testing/java/google/registry/testing/truth/TextDiffSubject.java +++ b/common/src/testing/java/google/registry/testing/truth/TextDiffSubject.java @@ -33,6 +33,8 @@ import com.google.common.truth.Fact; import com.google.common.truth.FailureMetadata; import com.google.common.truth.SimpleSubjectBuilder; import com.google.common.truth.Subject; +import com.google.errorprone.annotations.FormatMethod; +import com.google.errorprone.annotations.FormatString; import java.io.IOException; import java.net.URL; import java.util.Collection; @@ -125,8 +127,9 @@ public class TextDiffSubject extends Subject { return assertThat(Resources.asCharSource(resourceUrl, UTF_8).readLines()); } + @FormatMethod public static SimpleSubjectBuilder assertWithMessageAboutUrlSource( - String format, Object... params) { + @FormatString String format, Object... params) { return assertWithMessage(format, params).about(urlFactory()); } @@ -192,7 +195,7 @@ public class TextDiffSubject extends Subject { private record SideBySideRowFormatter(int maxExpectedLineLength, int maxActualLineLength) { - public String formatRow(String expected, String actual, char padChar) { + String formatRow(String expected, String actual, char padChar) { return String.format( "|%s|%s|", Strings.padEnd(expected, maxExpectedLineLength, padChar), diff --git a/core/src/main/java/google/registry/batch/ExpandBillingRecurrencesAction.java b/core/src/main/java/google/registry/batch/ExpandBillingRecurrencesAction.java index c54091e92..407da87dc 100644 --- a/core/src/main/java/google/registry/batch/ExpandBillingRecurrencesAction.java +++ b/core/src/main/java/google/registry/batch/ExpandBillingRecurrencesAction.java @@ -114,7 +114,9 @@ public class ExpandBillingRecurrencesAction implements Runnable { .getCursorTimeInstant())); checkArgument( startTime.isBefore(endTime), - String.format("Start time (%s) must be before end time (%s)", startTime, endTime)); + "Start time (%s) must be before end time (%s)", + startTime, + endTime); LaunchFlexTemplateParameter launchParameter = new LaunchFlexTemplateParameter() .setJobName( diff --git a/core/src/main/java/google/registry/beam/billing/ExpandBillingRecurrencesPipeline.java b/core/src/main/java/google/registry/beam/billing/ExpandBillingRecurrencesPipeline.java index 3cc58a332..21f65ebef 100644 --- a/core/src/main/java/google/registry/beam/billing/ExpandBillingRecurrencesPipeline.java +++ b/core/src/main/java/google/registry/beam/billing/ExpandBillingRecurrencesPipeline.java @@ -156,12 +156,12 @@ public class ExpandBillingRecurrencesPipeline implements Serializable { ExpandBillingRecurrencesPipeline(ExpandBillingRecurrencesPipelineOptions options, Clock clock) { startTime = Instant.parse(options.getStartTime()); endTime = Instant.parse(options.getEndTime()); - checkArgument( - !endTime.isAfter(clock.now()), - String.format("End time %s must be at or before now.", endTime)); + checkArgument(!endTime.isAfter(clock.now()), "End time %s must be at or before now.", endTime); checkArgument( startTime.isBefore(endTime), - String.format("[%s, %s) is not a valid window of operation.", startTime, endTime)); + "[%s, %s) is not a valid window of operation.", + startTime, + endTime); isDryRun = options.getIsDryRun(); advanceCursor = options.getAdvanceCursor(); } diff --git a/core/src/main/java/google/registry/beam/rde/RdeIO.java b/core/src/main/java/google/registry/beam/rde/RdeIO.java index 1263d0b4a..b1c374469 100644 --- a/core/src/main/java/google/registry/beam/rde/RdeIO.java +++ b/core/src/main/java/google/registry/beam/rde/RdeIO.java @@ -133,7 +133,7 @@ public class RdeIO { private final byte[] stagingKeyBytes; private final RdeMarshaller marshaller; - protected RdeWriter( + RdeWriter( GcsUtils gcsUtils, String rdeBucket, byte[] stagingKeyBytes, @@ -144,7 +144,7 @@ public class RdeIO { this.marshaller = new RdeMarshaller(validationMode); } - @SuppressWarnings("unused") + @SuppressWarnings({"EffectivelyPrivate", "unused"}) @Setup public void setup() { Security.addProvider(new BouncyCastleProvider()); diff --git a/core/src/main/java/google/registry/beam/resave/ResaveAllEppResourcesPipeline.java b/core/src/main/java/google/registry/beam/resave/ResaveAllEppResourcesPipeline.java index 0185433a2..32408815d 100644 --- a/core/src/main/java/google/registry/beam/resave/ResaveAllEppResourcesPipeline.java +++ b/core/src/main/java/google/registry/beam/resave/ResaveAllEppResourcesPipeline.java @@ -154,9 +154,7 @@ public class ResaveAllEppResourcesPipeline implements Serializable { } @ProcessElement - public void processElement( - @Element KV, Iterable> element, - OutputReceiver outputReceiver) { + public void processElement(@Element KV, Iterable> element) { tm().transact( () -> { DateTime now = tm().getTransactionTime(); diff --git a/core/src/main/java/google/registry/beam/spec11/Spec11Pipeline.java b/core/src/main/java/google/registry/beam/spec11/Spec11Pipeline.java index 8c304c2c3..3e376d9e5 100644 --- a/core/src/main/java/google/registry/beam/spec11/Spec11Pipeline.java +++ b/core/src/main/java/google/registry/beam/spec11/Spec11Pipeline.java @@ -210,8 +210,8 @@ public class Spec11Pipeline implements Serializable { String registrarId = kv.getKey(); checkArgument( kv.getValue().iterator().hasNext(), - String.format( - "Registrar with ID %s had no corresponding threats", registrarId)); + "Registrar with ID %s had no corresponding threats", + registrarId); String email = kv.getValue().iterator().next().email(); JSONObject output = new JSONObject(); try { diff --git a/core/src/main/java/google/registry/bigquery/BigqueryJobFailureException.java b/core/src/main/java/google/registry/bigquery/BigqueryJobFailureException.java index 28bf1b662..3ec2959ce 100644 --- a/core/src/main/java/google/registry/bigquery/BigqueryJobFailureException.java +++ b/core/src/main/java/google/registry/bigquery/BigqueryJobFailureException.java @@ -29,8 +29,8 @@ public final class BigqueryJobFailureException extends RuntimeException { /** Delegate {@link IOException} errors, checking for {@link GoogleJsonResponseException} */ public static BigqueryJobFailureException create(IOException cause) { - if (cause instanceof GoogleJsonResponseException) { - return create((GoogleJsonResponseException) cause); + if (cause instanceof GoogleJsonResponseException googleJsonResponseException) { + return create(googleJsonResponseException); } else { return new BigqueryJobFailureException(cause.getMessage(), cause, null, null); } diff --git a/core/src/main/java/google/registry/bsa/BlockListFetcher.java b/core/src/main/java/google/registry/bsa/BlockListFetcher.java index 06a6bbb55..b2a6de600 100644 --- a/core/src/main/java/google/registry/bsa/BlockListFetcher.java +++ b/core/src/main/java/google/registry/bsa/BlockListFetcher.java @@ -62,7 +62,7 @@ public class BlockListFetcher { // TODO: use more informative exceptions to describe retriable errors return retrier.callWithRetry( () -> tryFetch(blockListType), - e -> e instanceof BsaException && ((BsaException) e).isRetriable()); + e -> e instanceof BsaException bsaException && bsaException.isRetriable()); } LazyBlockList tryFetch(BlockListType blockListType) { diff --git a/core/src/main/java/google/registry/bsa/api/BsaReportSender.java b/core/src/main/java/google/registry/bsa/api/BsaReportSender.java index cd482138a..90a9718ef 100644 --- a/core/src/main/java/google/registry/bsa/api/BsaReportSender.java +++ b/core/src/main/java/google/registry/bsa/api/BsaReportSender.java @@ -71,19 +71,19 @@ public class BsaReportSender { public void sendOrderStatusReport(String payload) { retrier.callWithRetry( () -> trySendData(this.orderStatusUrl, payload), - e -> e instanceof BsaException && ((BsaException) e).isRetriable()); + e -> e instanceof BsaException bsaException && bsaException.isRetriable()); } public void addUnblockableDomainsUpdates(String payload) { retrier.callWithRetry( () -> trySendData(this.addUnblockableDomainsUrl, payload), - e -> e instanceof BsaException && ((BsaException) e).isRetriable()); + e -> e instanceof BsaException bsaException && bsaException.isRetriable()); } public void removeUnblockableDomainsUpdates(String payload) { retrier.callWithRetry( () -> trySendData(this.removeUnblockableDomainsUrl, payload), - e -> e instanceof BsaException && ((BsaException) e).isRetriable()); + e -> e instanceof BsaException bsaException && bsaException.isRetriable()); } Void trySendData(String urlString, String payload) { diff --git a/core/src/main/java/google/registry/config/DelegatedCredentials.java b/core/src/main/java/google/registry/config/DelegatedCredentials.java index b13567f32..09af7a473 100644 --- a/core/src/main/java/google/registry/config/DelegatedCredentials.java +++ b/core/src/main/java/google/registry/config/DelegatedCredentials.java @@ -131,7 +131,7 @@ public class DelegatedCredentials extends GoogleCredentials { Clock clock, Duration tokenRefreshDelay) { checkArgument( - tokenRefreshDelay.getSeconds() <= MAX_TOKEN_REFRESH_DELAY.getSeconds(), + tokenRefreshDelay.toSeconds() <= MAX_TOKEN_REFRESH_DELAY.toSeconds(), "Max refresh delay must not exceed %s.", MAX_TOKEN_REFRESH_DELAY); @@ -206,7 +206,7 @@ public class DelegatedCredentials extends GoogleCredentials { JsonWebToken.Payload payload = new JsonWebToken.Payload(); payload.setIssuer(this.delegatedServiceAccountUser); payload.setIssuedAtTimeSeconds(currentTime / 1000); - payload.setExpirationTimeSeconds(currentTime / 1000 + tokenRefreshDelay.getSeconds()); + payload.setExpirationTimeSeconds(currentTime / 1000 + tokenRefreshDelay.toSeconds()); payload.setSubject(delegatingUserEmail); payload.put("scope", Joiner.on(' ').join(scopes)); payload.setAudience(DEFAULT_TOKEN_URI); @@ -241,10 +241,10 @@ public class DelegatedCredentials extends GoogleCredentials { if (value == null) { throw new IOException(String.format(VALUE_NOT_FOUND_MESSAGE, errorPrefix, key)); } - if (!(value instanceof String)) { + if (!(value instanceof String string)) { throw new IOException(String.format(VALUE_WRONG_TYPE_MESSAGE, errorPrefix, "string", key)); } - return (String) value; + return string; } /** Return the specified integer from JSON or throw a helpful error message. */ @@ -257,9 +257,9 @@ public class DelegatedCredentials extends GoogleCredentials { if (value instanceof BigDecimal bigDecimalValue) { return bigDecimalValue.intValueExact(); } - if (!(value instanceof Integer)) { + if (!(value instanceof Integer i)) { throw new IOException(String.format(VALUE_WRONG_TYPE_MESSAGE, errorPrefix, "integer", key)); } - return (Integer) value; + return i; } } diff --git a/core/src/main/java/google/registry/export/ExportPremiumTermsAction.java b/core/src/main/java/google/registry/export/ExportPremiumTermsAction.java index c9d962db4..f766d73b7 100644 --- a/core/src/main/java/google/registry/export/ExportPremiumTermsAction.java +++ b/core/src/main/java/google/registry/export/ExportPremiumTermsAction.java @@ -144,7 +144,8 @@ public class ExportPremiumTermsAction implements Runnable { String premiumListName = tld.getPremiumListName().get(); checkState( PremiumListDao.getLatestRevision(premiumListName).isPresent(), - "Could not load premium list for " + tldStr); + "Could not load premium list for %s", + tldStr); SortedSet premiumTerms = PremiumListDao.loadAllPremiumEntries(premiumListName).stream() .map(PremiumEntry::toString) diff --git a/core/src/main/java/google/registry/export/sheet/SyncRegistrarsSheetAction.java b/core/src/main/java/google/registry/export/sheet/SyncRegistrarsSheetAction.java index b293b8e4b..d876e3227 100644 --- a/core/src/main/java/google/registry/export/sheet/SyncRegistrarsSheetAction.java +++ b/core/src/main/java/google/registry/export/sheet/SyncRegistrarsSheetAction.java @@ -76,7 +76,7 @@ public class SyncRegistrarsSheetAction implements Runnable { }}; private final int statusCode; - protected final String message; + final String message; Result(int statusCode, String message) { this.statusCode = statusCode; @@ -84,7 +84,7 @@ public class SyncRegistrarsSheetAction implements Runnable { } /** Log an error message. Results that use log levels other than info should override this. */ - protected void log(@Nullable Exception cause) { + void log(@Nullable Exception cause) { logger.atInfo().withCause(cause).log(message); } diff --git a/core/src/main/java/google/registry/flows/EppException.java b/core/src/main/java/google/registry/flows/EppException.java index 5dbef1faa..563d2a854 100644 --- a/core/src/main/java/google/registry/flows/EppException.java +++ b/core/src/main/java/google/registry/flows/EppException.java @@ -217,12 +217,13 @@ public abstract class EppException extends Exception { public static class UnimplementedCommandException extends EppException { public UnimplementedCommandException(InnerCommand command) { - super(String.format( - "No flow found for %s with extension %s", - command.getClass().getSimpleName(), - command instanceof ResourceCommandWrapper - ? ((ResourceCommandWrapper) command).getResourceCommand().getClass().getSimpleName() - : null)); + super( + String.format( + "No flow found for %s with extension %s", + command.getClass().getSimpleName(), + command instanceof ResourceCommandWrapper resourceCommandWrapper + ? resourceCommandWrapper.getResourceCommand().getClass().getSimpleName() + : null)); } public UnimplementedCommandException(String message) { diff --git a/core/src/main/java/google/registry/flows/EppXmlSanitizer.java b/core/src/main/java/google/registry/flows/EppXmlSanitizer.java index 6acacfde3..92cebcc4a 100644 --- a/core/src/main/java/google/registry/flows/EppXmlSanitizer.java +++ b/core/src/main/java/google/registry/flows/EppXmlSanitizer.java @@ -23,6 +23,7 @@ import com.google.common.flogger.FluentLogger; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Locale; @@ -140,7 +141,7 @@ public class EppXmlSanitizer { } } xmlEventWriter.flush(); - return outputXmlBytes.toString(inputEncoding); + return outputXmlBytes.toString(Charset.forName(inputEncoding)); } private static String maskSensitiveData(String original) { diff --git a/core/src/main/java/google/registry/flows/domain/DomainFlowTmchUtils.java b/core/src/main/java/google/registry/flows/domain/DomainFlowTmchUtils.java index 5761a83f7..52cf0e3fc 100644 --- a/core/src/main/java/google/registry/flows/domain/DomainFlowTmchUtils.java +++ b/core/src/main/java/google/registry/flows/domain/DomainFlowTmchUtils.java @@ -60,10 +60,10 @@ public final class DomainFlowTmchUtils { if (signedMarks.size() > 1) { throw new TooManySignedMarksException(); } - if (!(signedMarks.get(0) instanceof EncodedSignedMark)) { + if (!(signedMarks.get(0) instanceof EncodedSignedMark encodedSignedMark)) { throw new SignedMarksMustBeEncodedException(); } - SignedMark signedMark = verifyEncodedSignedMark((EncodedSignedMark) signedMarks.get(0), now); + SignedMark signedMark = verifyEncodedSignedMark(encodedSignedMark, now); return verifySignedMarkValidForDomainLabel(signedMark, domainLabel); } diff --git a/core/src/main/java/google/registry/flows/domain/FeesAndCredits.java b/core/src/main/java/google/registry/flows/domain/FeesAndCredits.java index cfecde986..b65aa8909 100644 --- a/core/src/main/java/google/registry/flows/domain/FeesAndCredits.java +++ b/core/src/main/java/google/registry/flows/domain/FeesAndCredits.java @@ -127,11 +127,11 @@ public class FeesAndCredits extends ImmutableObject implements Buildable { } public Builder addFeeOrCredit(BaseFee feeOrCredit) { - if (feeOrCredit instanceof Credit) { + if (feeOrCredit instanceof Credit credit) { getInstance().credits = new ImmutableList.Builder() .addAll(nullToEmptyImmutableCopy(getInstance().credits)) - .add((Credit) feeOrCredit) + .add(credit) .build(); } else { getInstance().fees = @@ -147,8 +147,8 @@ public class FeesAndCredits extends ImmutableObject implements Buildable { ImmutableList.Builder feeBuilder = new ImmutableList.Builder<>(); ImmutableList.Builder creditBuilder = new ImmutableList.Builder<>(); for (BaseFee feeOrCredit : feesAndCredits) { - if (feeOrCredit instanceof Credit) { - creditBuilder.add((Credit) feeOrCredit); + if (feeOrCredit instanceof Credit credit) { + creditBuilder.add(credit); } else { feeBuilder.add((Fee) feeOrCredit); } diff --git a/core/src/main/java/google/registry/flows/picker/FlowPicker.java b/core/src/main/java/google/registry/flows/picker/FlowPicker.java index e38b0d03d..0dcfda299 100644 --- a/core/src/main/java/google/registry/flows/picker/FlowPicker.java +++ b/core/src/main/java/google/registry/flows/picker/FlowPicker.java @@ -90,8 +90,12 @@ public class FlowPicker { /** Get the flow associated with this {@link EppInput} or return null to signal no match. */ Class get(EppInput eppInput) { InnerCommand innerCommand = eppInput.getCommandWrapper().getCommand(); - return get(eppInput, innerCommand, (innerCommand instanceof ResourceCommandWrapper) - ? ((ResourceCommandWrapper) innerCommand).getResourceCommand() : null); + return get( + eppInput, + innerCommand, + (innerCommand instanceof ResourceCommandWrapper resourceCommandWrapper) + ? resourceCommandWrapper.getResourceCommand() + : null); } /** @@ -129,10 +133,10 @@ public class FlowPicker { @Override Class get( EppInput eppInput, InnerCommand innerCommand, ResourceCommand resourceCommand) { - if (!(innerCommand instanceof Poll)) { + if (!(innerCommand instanceof Poll poll)) { return null; } - return switch (((Poll) innerCommand).getPollOp()) { + return switch (poll.getPollOp()) { case ACK -> PollAckFlow.class; case REQUEST -> PollRequestFlow.class; }; @@ -222,28 +226,51 @@ public class FlowPicker { }}; /** Transfer flows have an {@link InnerCommand} of type {@link Transfer}. */ - private static final FlowProvider TRANSFER_FLOW_PROVIDER = new FlowProvider() { - private final Table, TransferOp, Class> transferFlows = ImmutableTable - ., TransferOp, Class>builder() - .put(ContactCommand.Transfer.class, TransferOp.APPROVE, ContactTransferApproveFlow.class) - .put(ContactCommand.Transfer.class, TransferOp.CANCEL, ContactTransferCancelFlow.class) - .put(ContactCommand.Transfer.class, TransferOp.QUERY, ContactTransferQueryFlow.class) - .put(ContactCommand.Transfer.class, TransferOp.REJECT, ContactTransferRejectFlow.class) - .put(ContactCommand.Transfer.class, TransferOp.REQUEST, ContactTransferRequestFlow.class) - .put(DomainCommand.Transfer.class, TransferOp.APPROVE, DomainTransferApproveFlow.class) - .put(DomainCommand.Transfer.class, TransferOp.CANCEL, DomainTransferCancelFlow.class) - .put(DomainCommand.Transfer.class, TransferOp.QUERY, DomainTransferQueryFlow.class) - .put(DomainCommand.Transfer.class, TransferOp.REJECT, DomainTransferRejectFlow.class) - .put(DomainCommand.Transfer.class, TransferOp.REQUEST, DomainTransferRequestFlow.class) - .build(); + private static final FlowProvider TRANSFER_FLOW_PROVIDER = + new FlowProvider() { + private final Table, TransferOp, Class> transferFlows = + ImmutableTable., TransferOp, Class>builder() + .put( + ContactCommand.Transfer.class, + TransferOp.APPROVE, + ContactTransferApproveFlow.class) + .put( + ContactCommand.Transfer.class, + TransferOp.CANCEL, + ContactTransferCancelFlow.class) + .put( + ContactCommand.Transfer.class, TransferOp.QUERY, ContactTransferQueryFlow.class) + .put( + ContactCommand.Transfer.class, + TransferOp.REJECT, + ContactTransferRejectFlow.class) + .put( + ContactCommand.Transfer.class, + TransferOp.REQUEST, + ContactTransferRequestFlow.class) + .put( + DomainCommand.Transfer.class, + TransferOp.APPROVE, + DomainTransferApproveFlow.class) + .put( + DomainCommand.Transfer.class, TransferOp.CANCEL, DomainTransferCancelFlow.class) + .put(DomainCommand.Transfer.class, TransferOp.QUERY, DomainTransferQueryFlow.class) + .put( + DomainCommand.Transfer.class, TransferOp.REJECT, DomainTransferRejectFlow.class) + .put( + DomainCommand.Transfer.class, + TransferOp.REQUEST, + DomainTransferRequestFlow.class) + .build(); - @Override - Class get( - EppInput eppInput, InnerCommand innerCommand, ResourceCommand resourceCommand) { - return resourceCommand != null && innerCommand instanceof Transfer - ? transferFlows.get(resourceCommand.getClass(), ((Transfer) innerCommand).getTransferOp()) - : null; - }}; + @Override + Class get( + EppInput eppInput, InnerCommand innerCommand, ResourceCommand resourceCommand) { + return resourceCommand != null && innerCommand instanceof Transfer transfer + ? transferFlows.get(resourceCommand.getClass(), transfer.getTransferOp()) + : null; + } + }; private static final ImmutableList FLOW_PROVIDERS = ImmutableList.of( diff --git a/core/src/main/java/google/registry/gcs/GcsUtils.java b/core/src/main/java/google/registry/gcs/GcsUtils.java index 21f32c345..b556ce6d8 100644 --- a/core/src/main/java/google/registry/gcs/GcsUtils.java +++ b/core/src/main/java/google/registry/gcs/GcsUtils.java @@ -182,7 +182,7 @@ public class GcsUtils implements Serializable { // These two methods are needed to check whether serialization is done correctly in tests. @Override public boolean equals(Object obj) { - return obj instanceof GcsUtils && ((GcsUtils) obj).storageOptions.equals(storageOptions); + return obj instanceof GcsUtils gcsUtils && gcsUtils.storageOptions.equals(storageOptions); } @Override diff --git a/core/src/main/java/google/registry/groups/DirectoryGroupsConnection.java b/core/src/main/java/google/registry/groups/DirectoryGroupsConnection.java index dc95ee09c..58834d7e9 100644 --- a/core/src/main/java/google/registry/groups/DirectoryGroupsConnection.java +++ b/core/src/main/java/google/registry/groups/DirectoryGroupsConnection.java @@ -68,7 +68,7 @@ public class DirectoryGroupsConnection implements GroupsConnection { @VisibleForTesting static Groups getDefaultGroupPermissions() { Groups permissions = new Groups(); - permissions.setAllowExternalMembers(Boolean.TRUE.toString()); + permissions.setAllowExternalMembers("true"); permissions.setWhoCanPostMessage("ALL_MANAGERS_CAN_POST"); permissions.setWhoCanViewGroup("ALL_MANAGERS_CAN_VIEW"); permissions.setWhoCanViewMembership("ALL_MANAGERS_CAN_VIEW"); diff --git a/core/src/main/java/google/registry/groups/GmailClient.java b/core/src/main/java/google/registry/groups/GmailClient.java index 90f1a975e..fb223faaa 100644 --- a/core/src/main/java/google/registry/groups/GmailClient.java +++ b/core/src/main/java/google/registry/groups/GmailClient.java @@ -174,8 +174,8 @@ public final class GmailClient { @Override public boolean test(Throwable e) { - if (e instanceof HttpResponseException) { - return testHttpResponse((HttpResponseException) e); + if (e instanceof HttpResponseException httpResponseException) { + return testHttpResponse(httpResponseException); } return true; } diff --git a/core/src/main/java/google/registry/loadtest/LoadTestAction.java b/core/src/main/java/google/registry/loadtest/LoadTestAction.java index 9cf9c6826..319da0b3f 100644 --- a/core/src/main/java/google/registry/loadtest/LoadTestAction.java +++ b/core/src/main/java/google/registry/loadtest/LoadTestAction.java @@ -280,9 +280,9 @@ public class LoadTestAction implements Runnable { "clientId", registrarId, "superuser", - Boolean.FALSE.toString(), + "false", "dryRun", - Boolean.FALSE.toString(), + "false", "xml", xmls.get(i))) .toBuilder() diff --git a/core/src/main/java/google/registry/model/ImmutableObject.java b/core/src/main/java/google/registry/model/ImmutableObject.java index 1d4526f2c..9af1aa501 100644 --- a/core/src/main/java/google/registry/model/ImmutableObject.java +++ b/core/src/main/java/google/registry/model/ImmutableObject.java @@ -94,7 +94,8 @@ public abstract class ImmutableObject implements Cloneable { @Override public boolean equals(Object other) { - return other instanceof ImmutableObject && equalsImmutableObject((ImmutableObject) other); + return other instanceof ImmutableObject immutableObject + && equalsImmutableObject(immutableObject); } @Override @@ -141,8 +142,8 @@ public abstract class ImmutableObject implements Cloneable { NavigableMap sortedFields = new TreeMap<>(); for (Entry entry : getSignificantFields().entrySet()) { Object value = entry.getValue(); - if (value instanceof Instant) { - value = ISO_8601_FORMATTER.format((Instant) value); + if (value instanceof Instant instant) { + value = ISO_8601_FORMATTER.format(instant); } sortedFields.put(entry.getKey().getName(), value); } @@ -159,8 +160,8 @@ public abstract class ImmutableObject implements Cloneable { field.isAnnotationPresent(DoNotHydrate.class) ? entry.getValue() : hydrate(entry.getValue()); - if (value instanceof Instant) { - value = ISO_8601_FORMATTER.format((Instant) value); + if (value instanceof Instant instant) { + value = ISO_8601_FORMATTER.format(instant); } sortedFields.put(field.getName(), value); } @@ -176,17 +177,17 @@ public abstract class ImmutableObject implements Cloneable { /** Helper function to recursively hydrate an ImmutableObject. */ private static Object hydrate(Object value) { - if (value instanceof Map) { - return transformValues((Map) value, ImmutableObject::hydrate); + if (value instanceof Map map) { + return transformValues(map, ImmutableObject::hydrate); } - if (value instanceof Collection) { - return transform((Collection) value, ImmutableObject::hydrate); + if (value instanceof Collection collection) { + return transform(collection, ImmutableObject::hydrate); } - if (value instanceof ImmutableObject) { - return ((ImmutableObject) value).toHydratedString(); + if (value instanceof ImmutableObject immutableObject) { + return immutableObject.toHydratedString(); } - if (value instanceof Instant) { - return ISO_8601_FORMATTER.format((Instant) value); + if (value instanceof Instant instant) { + return ISO_8601_FORMATTER.format(instant); } return value; } @@ -195,22 +196,21 @@ public abstract class ImmutableObject implements Cloneable { private static Object toMapRecursive(Object o) { if (o == null) { return null; - } else if (o instanceof ImmutableObject) { + } else if (o instanceof ImmutableObject immutableObject) { // LinkedHashMap to preserve field ordering and because ImmutableMap forbids null // values. Map result = new LinkedHashMap<>(); - for (Entry entry : ((ImmutableObject) o).getSignificantFields().entrySet()) { + for (Entry entry : immutableObject.getSignificantFields().entrySet()) { Field field = entry.getKey(); if (!field.isAnnotationPresent(IgnoredInDiffableMap.class)) { result.put(field.getName(), toMapRecursive(entry.getValue())); } } return result; - } else if (o instanceof Map) { - return transformValues((Map) o, ImmutableObject::toMapRecursive); - } else if (o instanceof Set) { - return ((Set) o) - .stream() + } else if (o instanceof Map map) { + return transformValues(map, ImmutableObject::toMapRecursive); + } else if (o instanceof Set set) { + return set.stream() .map(ImmutableObject::toMapRecursive) // We can't use toImmutableSet here, because values can be null (especially since the // original ImmutableObject might have been the result of a cloneEmptyToNull call). @@ -218,15 +218,14 @@ public abstract class ImmutableObject implements Cloneable { // We can't use toSet either, because we want to preserve order. So we use LinkedHashSet // instead. .collect(toCollection(LinkedHashSet::new)); - } else if (o instanceof Collection) { - return ((Collection) o) - .stream() + } else if (o instanceof Collection collection) { + return collection.stream() .map(ImmutableObject::toMapRecursive) // We can't use toImmutableList here, because values can be null (especially since the // original ImmutableObject might have been the result of a cloneEmptyToNull call). .collect(toList()); - } else if (o instanceof Instant) { - return ISO_8601_FORMATTER.format((Instant) o); + } else if (o instanceof Instant instant) { + return ISO_8601_FORMATTER.format(instant); } else if (o instanceof Number || o instanceof Boolean) { return o; } else { diff --git a/core/src/main/java/google/registry/model/ModelUtils.java b/core/src/main/java/google/registry/model/ModelUtils.java index cc9dde20b..3246529f7 100644 --- a/core/src/main/java/google/registry/model/ModelUtils.java +++ b/core/src/main/java/google/registry/model/ModelUtils.java @@ -167,9 +167,9 @@ public class ModelUtils { // Recurse into maps with ImmutableObject values. return transformValues((Map) obj, ModelUtils::cloneEmptyToNullRecursive); } - if (obj instanceof ImmutableObject) { + if (obj instanceof ImmutableObject immutableObject) { // Recurse on the fields of an ImmutableObject. - ImmutableObject copy = ImmutableObject.clone((ImmutableObject) obj); + ImmutableObject copy = ImmutableObject.clone(immutableObject); for (Field field : getAllFields(obj.getClass()).values()) { Object oldValue = getFieldValue(obj, field); Object newValue = cloneEmptyToNullRecursive(oldValue); diff --git a/core/src/main/java/google/registry/model/domain/fee06/FeeCheckCommandExtensionV06.java b/core/src/main/java/google/registry/model/domain/fee06/FeeCheckCommandExtensionV06.java index ea47e5bde..6d75de1d7 100644 --- a/core/src/main/java/google/registry/model/domain/fee06/FeeCheckCommandExtensionV06.java +++ b/core/src/main/java/google/registry/model/domain/fee06/FeeCheckCommandExtensionV06.java @@ -50,8 +50,8 @@ public class FeeCheckCommandExtensionV06 extends ImmutableObject ImmutableList items) { ImmutableList.Builder builder = new ImmutableList.Builder<>(); for (FeeCheckResponseExtensionItem item : items) { - if (item instanceof FeeCheckResponseExtensionItemV06) { - builder.add((FeeCheckResponseExtensionItemV06) item); + if (item instanceof FeeCheckResponseExtensionItemV06 feeCheckResponseExtensionItemV06) { + builder.add(feeCheckResponseExtensionItemV06); } } return FeeCheckResponseExtensionV06.create(builder.build()); diff --git a/core/src/main/java/google/registry/model/domain/fee12/FeeCheckCommandExtensionV12.java b/core/src/main/java/google/registry/model/domain/fee12/FeeCheckCommandExtensionV12.java index ec4890bc8..1ff711017 100644 --- a/core/src/main/java/google/registry/model/domain/fee12/FeeCheckCommandExtensionV12.java +++ b/core/src/main/java/google/registry/model/domain/fee12/FeeCheckCommandExtensionV12.java @@ -54,8 +54,8 @@ public class FeeCheckCommandExtensionV12 extends ImmutableObject ImmutableList items) { ImmutableList.Builder builder = new ImmutableList.Builder<>(); for (FeeCheckResponseExtensionItem item : items) { - if (item instanceof FeeCheckResponseExtensionItemV12) { - builder.add((FeeCheckResponseExtensionItemV12) item); + if (item instanceof FeeCheckResponseExtensionItemV12 feeCheckResponseExtensionItemV12) { + builder.add(feeCheckResponseExtensionItemV12); } } return FeeCheckResponseExtensionV12.create(currency, builder.build()); diff --git a/core/src/main/java/google/registry/model/domain/launch/LaunchPhase.java b/core/src/main/java/google/registry/model/domain/launch/LaunchPhase.java index 5b991aa21..f9d624c19 100644 --- a/core/src/main/java/google/registry/model/domain/launch/LaunchPhase.java +++ b/core/src/main/java/google/registry/model/domain/launch/LaunchPhase.java @@ -89,9 +89,9 @@ public class LaunchPhase extends ImmutableObject { /** A special equals implementation that only considers the string value. */ @Override public boolean equals(Object other) { - return other instanceof LaunchPhase - && Objects.equals(phase, ((LaunchPhase) other).phase) - && Objects.equals(subphase, ((LaunchPhase) other).subphase); + return other instanceof LaunchPhase launchPhase + && Objects.equals(phase, launchPhase.phase) + && Objects.equals(subphase, launchPhase.subphase); } /** A special hashCode implementation that only considers the string value. */ diff --git a/core/src/main/java/google/registry/model/eppcommon/EppXmlTransformer.java b/core/src/main/java/google/registry/model/eppcommon/EppXmlTransformer.java index 5f0bd494a..8b046cc8f 100644 --- a/core/src/main/java/google/registry/model/eppcommon/EppXmlTransformer.java +++ b/core/src/main/java/google/registry/model/eppcommon/EppXmlTransformer.java @@ -18,7 +18,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSet; import google.registry.flows.FeeExtensionXmlTagNormalizer; import google.registry.model.ImmutableObject; import google.registry.model.domain.fee.FeeCheckResponseExtension; @@ -60,9 +59,6 @@ public class EppXmlTransformer { "allocationToken-1.0.xsd", "bulkToken.xsd"); - // XML schemas that should not be used in production (yet) - private static final ImmutableSet NON_PROD_SCHEMAS = ImmutableSet.of("fee-std-v1.xsd"); - private static final XmlTransformer INPUT_TRANSFORMER = new XmlTransformer(getSchemas(), EppInput.class); diff --git a/core/src/main/java/google/registry/model/eppinput/EppInput.java b/core/src/main/java/google/registry/model/eppinput/EppInput.java index b21126852..be281c3b9 100644 --- a/core/src/main/java/google/registry/model/eppinput/EppInput.java +++ b/core/src/main/java/google/registry/model/eppinput/EppInput.java @@ -125,8 +125,8 @@ public class EppInput extends ImmutableObject { @Nullable private ResourceCommand getResourceCommand() { InnerCommand innerCommand = commandWrapper.getCommand(); - return innerCommand instanceof ResourceCommandWrapper - ? ((ResourceCommandWrapper) innerCommand).getResourceCommand() + return innerCommand instanceof ResourceCommandWrapper resourceCommandWrapper + ? resourceCommandWrapper.getResourceCommand() : null; } @@ -136,8 +136,8 @@ public class EppInput extends ImmutableObject { */ public Optional getSingleTargetId() { ResourceCommand resourceCommand = getResourceCommand(); - return resourceCommand instanceof SingleResourceCommand - ? Optional.of(((SingleResourceCommand) resourceCommand).getTargetId()) + return resourceCommand instanceof SingleResourceCommand singleResourceCommand + ? Optional.of(singleResourceCommand.getTargetId()) : Optional.empty(); } @@ -147,10 +147,10 @@ public class EppInput extends ImmutableObject { */ public ImmutableList getTargetIds() { ResourceCommand resourceCommand = getResourceCommand(); - if (resourceCommand instanceof SingleResourceCommand) { - return ImmutableList.of(((SingleResourceCommand) resourceCommand).getTargetId()); - } else if (resourceCommand instanceof ResourceCheck) { - return ((ResourceCheck) resourceCommand).getTargetIds(); + if (resourceCommand instanceof SingleResourceCommand singleResourceCommand) { + return ImmutableList.of(singleResourceCommand.getTargetId()); + } else if (resourceCommand instanceof ResourceCheck resourceCheck) { + return resourceCheck.getTargetIds(); } else { return ImmutableList.of(); } diff --git a/core/src/main/java/google/registry/model/registrar/Registrar.java b/core/src/main/java/google/registry/model/registrar/Registrar.java index b42352e06..f7583e054 100644 --- a/core/src/main/java/google/registry/model/registrar/Registrar.java +++ b/core/src/main/java/google/registry/model/registrar/Registrar.java @@ -1095,18 +1095,17 @@ public class Registrar extends UpdateAutoTimestampEntity implements Buildable, J "Must specify at least one of localized or internationalized address"); checkArgument( getInstance().type.isValidIanaId(getInstance().ianaIdentifier), - String.format( - "Supplied IANA ID is not valid for %s registrar type: %s", - getInstance().type, getInstance().ianaIdentifier)); + "Supplied IANA ID is not valid for %s registrar type: %s", + getInstance().type, + getInstance().ianaIdentifier); // We do not allow creating Real registrars with IANA ID that's already in the system // b/315007360 - for more details checkArgument( isNotADuplicateIanaId(loadAllCached(), getInstance()), - String.format( - "Rejected attempt to create a registrar with ianaId that's already in the system -" - + " %s", - getInstance().ianaIdentifier)); + "Rejected attempt to create a registrar with ianaId that's already in the system -" + + " %s", + getInstance().ianaIdentifier); // In order to grant access to real TLDs, the registrar must have a corresponding billing // account ID for that TLD's billing currency. diff --git a/core/src/main/java/google/registry/model/reporting/HistoryEntry.java b/core/src/main/java/google/registry/model/reporting/HistoryEntry.java index c7f1ae656..c5a21b13b 100644 --- a/core/src/main/java/google/registry/model/reporting/HistoryEntry.java +++ b/core/src/main/java/google/registry/model/reporting/HistoryEntry.java @@ -364,10 +364,10 @@ public abstract class HistoryEntry extends ImmutableObject public static HistoryEntry.Builder createBuilderForResource(E parent) { - if (parent instanceof DomainBase) { - return new DomainHistory.Builder().setDomain((DomainBase) parent); - } else if (parent instanceof HostBase) { - return new HostHistory.Builder().setHost((HostBase) parent); + if (parent instanceof DomainBase domainBase) { + return new DomainHistory.Builder().setDomain(domainBase); + } else if (parent instanceof HostBase hostBase) { + return new HostHistory.Builder().setHost(hostBase); } else { throw new IllegalStateException( String.format( diff --git a/core/src/main/java/google/registry/model/server/Lock.java b/core/src/main/java/google/registry/model/server/Lock.java index b6d58565d..0bf6320be 100644 --- a/core/src/main/java/google/registry/model/server/Lock.java +++ b/core/src/main/java/google/registry/model/server/Lock.java @@ -140,19 +140,17 @@ public class Lock extends ImmutableObject implements Serializable { Lock lock = acquireResult.existingLock(); DateTime now = acquireResult.transactionTime(); switch (acquireResult.lockState()) { - case IN_USE: - logger.atInfo().log( - "Existing lock by request is still valid now %s (until %s) lock: %s", - now, lock.expirationTime, lock.lockId); - break; - case TIMED_OUT: - logger.atInfo().log( - "Existing lock by request is timed out now %s (was valid until %s) lock: %s", - now, lock.expirationTime, lock.lockId); - break; - case FREE: + case IN_USE -> + logger.atInfo().log( + "Existing lock by request is still valid now %s (until %s) lock: %s", + now, lock.expirationTime, lock.lockId); + case TIMED_OUT -> + logger.atInfo().log( + "Existing lock by request is timed out now %s (was valid until %s) lock: %s", + now, lock.expirationTime, lock.lockId); + case FREE -> { // There was no existing lock - break; + } } Lock newLock = acquireResult.newLock(); if (acquireResult.newLock() != null) { diff --git a/core/src/main/java/google/registry/model/tld/Tld.java b/core/src/main/java/google/registry/model/tld/Tld.java index da973a4d0..625eb6a05 100644 --- a/core/src/main/java/google/registry/model/tld/Tld.java +++ b/core/src/main/java/google/registry/model/tld/Tld.java @@ -1164,7 +1164,6 @@ public class Tld extends ImmutableObject implements Buildable, UnsafeSerializabl return this; } - public static final Pattern ROID_SUFFIX_PATTERN = Pattern.compile("^[A-Z\\d]{1,8}$"); public Builder setRoidSuffix(String roidSuffix) { @@ -1217,15 +1216,15 @@ public class Tld extends ImmutableObject implements Buildable, UnsafeSerializabl AllocationToken token = tm().loadByKey(tokenKey); checkArgument( token.getTokenType().equals(TokenType.DEFAULT_PROMO), - String.format( - "Token %s has an invalid token type of %s. DefaultPromoTokens must be of" - + " the type DEFAULT_PROMO", - token.getToken(), token.getTokenType())); + "Token %s has an invalid token type of %s. DefaultPromoTokens must be of" + + " the type DEFAULT_PROMO", + token.getToken(), + token.getTokenType()); checkArgument( token.getAllowedTlds().contains(getInstance().tldStr), - String.format( - "The token %s is not valid for this TLD. The valid TLDs for it are %s", - token.getToken(), token.getAllowedTlds())); + "The token %s is not valid for this TLD. The valid TLDs for it are %s", + token.getToken(), + token.getAllowedTlds()); } getInstance().defaultPromoTokens = promoTokens; }); diff --git a/core/src/main/java/google/registry/model/tld/label/ReservationType.java b/core/src/main/java/google/registry/model/tld/label/ReservationType.java index 431bfde58..eb348ca42 100644 --- a/core/src/main/java/google/registry/model/tld/label/ReservationType.java +++ b/core/src/main/java/google/registry/model/tld/label/ReservationType.java @@ -29,11 +29,6 @@ import javax.annotation.Nullable; */ public enum ReservationType { - // We explicitly set the severity, even though we have a checkState that makes it equal to the - // ordinal, so that no one accidentally reorders these values and changes the sort order. If a - // label has multiple reservation types, its message is the that of the one with the highest - // severity. - /** The domain can only be registered during sunrise, and is reserved thereafter. */ ALLOWED_IN_SUNRISE("Reserved", 0), @@ -55,6 +50,13 @@ public enum ReservationType { @Nullable private final String messageForCheck; + /** + * We explicitly set the severity, even though we have a checkState that makes it equal to the + * ordinal, so that no one accidentally reorders these values and changes the sort order. If a + * label has multiple reservation types, its message is the that of the one with the highest + * severity. + */ + @SuppressWarnings("EnumOrdinal") ReservationType(@Nullable String messageForCheck, int severity) { this.messageForCheck = messageForCheck; checkState( @@ -67,13 +69,7 @@ public enum ReservationType { return messageForCheck; } - private static final Ordering ORDERING = - new Ordering<>() { - @Override - public int compare(ReservationType left, ReservationType right) { - return Integer.compare(left.ordinal(), right.ordinal()); - } - }; + private static final Ordering ORDERING = Ordering.natural(); /** * Returns the {@code ReservationType} with the highest severity, used when a label has multiple diff --git a/core/src/main/java/google/registry/model/tld/label/ReservedList.java b/core/src/main/java/google/registry/model/tld/label/ReservedList.java index 0905a3995..a5f23d50c 100644 --- a/core/src/main/java/google/registry/model/tld/label/ReservedList.java +++ b/core/src/main/java/google/registry/model/tld/label/ReservedList.java @@ -151,7 +151,7 @@ public final class ReservedList private static class Builder extends DomainLabelEntry.Builder { - public Builder() {} + Builder() {} private Builder(ReservedListEntry instance) { super(instance); diff --git a/core/src/main/java/google/registry/mosapi/MosApiMetrics.java b/core/src/main/java/google/registry/mosapi/MosApiMetrics.java index 102659322..7bf165268 100644 --- a/core/src/main/java/google/registry/mosapi/MosApiMetrics.java +++ b/core/src/main/java/google/registry/mosapi/MosApiMetrics.java @@ -305,8 +305,8 @@ public class MosApiMetrics { Metric metric = new Metric().setType(METRIC_DOMAIN + suffix).setLabels(labels); TypedValue tv = new TypedValue(); - if (val instanceof Double) { - tv.setDoubleValue((Double) val); + if (val instanceof Double d) { + tv.setDoubleValue(d); } else { tv.setInt64Value(val.longValue()); } diff --git a/core/src/main/java/google/registry/mosapi/module/MosApiModule.java b/core/src/main/java/google/registry/mosapi/module/MosApiModule.java index 73ff6621f..4c2fa8188 100644 --- a/core/src/main/java/google/registry/mosapi/module/MosApiModule.java +++ b/core/src/main/java/google/registry/mosapi/module/MosApiModule.java @@ -114,10 +114,10 @@ public final class MosApiModule { try (PEMParser pemParser = new PEMParser(new StringReader(tlsKey))) { Object parsedObj = pemParser.readObject(); JcaPEMKeyConverter converter = new JcaPEMKeyConverter(); - if (parsedObj instanceof PEMKeyPair) { - return converter.getPrivateKey(((PEMKeyPair) parsedObj).getPrivateKeyInfo()); - } else if (parsedObj instanceof PrivateKeyInfo) { - return converter.getPrivateKey((PrivateKeyInfo) parsedObj); + if (parsedObj instanceof PEMKeyPair pemKeyPair) { + return converter.getPrivateKey(pemKeyPair.getPrivateKeyInfo()); + } else if (parsedObj instanceof PrivateKeyInfo privateKeyInfo) { + return converter.getPrivateKey(privateKeyInfo); } throw new IllegalArgumentException( String.format( diff --git a/core/src/main/java/google/registry/persistence/JpaRetries.java b/core/src/main/java/google/registry/persistence/JpaRetries.java index 58467cb5c..dad1c840e 100644 --- a/core/src/main/java/google/registry/persistence/JpaRetries.java +++ b/core/src/main/java/google/registry/persistence/JpaRetries.java @@ -36,8 +36,8 @@ public final class JpaRetries { ((Predicate) OptimisticLockException.class::isInstance) .or( e -> - e instanceof SQLException - && RETRIABLE_TXN_SQL_STATE.contains(((SQLException) e).getSQLState())); + e instanceof SQLException sqlException + && RETRIABLE_TXN_SQL_STATE.contains(sqlException.getSQLState())); public static boolean isFailedTxnRetriable(Throwable throwable) { Throwable t = throwable; diff --git a/core/src/main/java/google/registry/privileges/secretmanager/SecretManagerClientImpl.java b/core/src/main/java/google/registry/privileges/secretmanager/SecretManagerClientImpl.java index cc3ae8e6c..6eef1722e 100644 --- a/core/src/main/java/google/registry/privileges/secretmanager/SecretManagerClientImpl.java +++ b/core/src/main/java/google/registry/privileges/secretmanager/SecretManagerClientImpl.java @@ -173,7 +173,7 @@ public class SecretManagerClientImpl implements SecretManagerClient { } private static boolean isRetryableException(Throwable e) { - return e instanceof ApiException && ((ApiException) e).isRetryable(); + return e instanceof ApiException apiException && apiException.isRetryable(); } private static Replication defaultReplicationPolicy() { diff --git a/core/src/main/java/google/registry/rdap/AbstractJsonableObject.java b/core/src/main/java/google/registry/rdap/AbstractJsonableObject.java index e2351ec82..1cc87782f 100644 --- a/core/src/main/java/google/registry/rdap/AbstractJsonableObject.java +++ b/core/src/main/java/google/registry/rdap/AbstractJsonableObject.java @@ -325,14 +325,14 @@ abstract class AbstractJsonableObject implements Jsonable { verifyAllowedJsonKeyName(name, member, jsonable.getClass()); return jsonable.toJson(); } - if (object instanceof String) { - return new JsonPrimitive((String) object); + if (object instanceof String string) { + return new JsonPrimitive(string); } - if (object instanceof Number) { - return new JsonPrimitive((Number) object); + if (object instanceof Number number) { + return new JsonPrimitive(number); } - if (object instanceof Boolean) { - return new JsonPrimitive((Boolean) object); + if (object instanceof Boolean b) { + return new JsonPrimitive(b); } if (object instanceof DateTime) { // According to RFC 9083 section 3, the syntax of dates and times is defined in RFC3339. @@ -340,11 +340,11 @@ abstract class AbstractJsonableObject implements Jsonable { // According to RFC3339, we should use ISO8601, which is what DateTime.toString does! return new JsonPrimitive(object.toString()); } - if (object instanceof Instant) { + if (object instanceof Instant instant) { // According to RFC 9083 section 3, the syntax of dates and times is defined in RFC3339. // // According to RFC3339, we should use ISO8601, so we use ISO_8601_FORMATTER. - return new JsonPrimitive(ISO_8601_FORMATTER.format((Instant) object)); + return new JsonPrimitive(ISO_8601_FORMATTER.format(instant)); } if (object == null) { return JsonNull.INSTANCE; diff --git a/core/src/main/java/google/registry/rdap/RdapActionBase.java b/core/src/main/java/google/registry/rdap/RdapActionBase.java index f9335092c..1dc9a5829 100644 --- a/core/src/main/java/google/registry/rdap/RdapActionBase.java +++ b/core/src/main/java/google/registry/rdap/RdapActionBase.java @@ -156,9 +156,9 @@ public abstract class RdapActionBase implements Runnable { ReplyPayloadBase replyObject = getJsonObjectForResource(pathSearchString, requestMethod == Action.Method.HEAD); - if (replyObject instanceof BaseSearchResponse) { + if (replyObject instanceof BaseSearchResponse baseSearchResponse) { metricInformationBuilder.setIncompletenessWarningType( - ((BaseSearchResponse) replyObject).incompletenessWarningType()); + baseSearchResponse.incompletenessWarningType()); } // RFC7480 5.1 - if the server has the information requested and wishes to respond, it returns // that answer in the body of a 200 (OK) response diff --git a/core/src/main/java/google/registry/rdap/RdapSearchActionBase.java b/core/src/main/java/google/registry/rdap/RdapSearchActionBase.java index bf492a85b..48fbe428f 100644 --- a/core/src/main/java/google/registry/rdap/RdapSearchActionBase.java +++ b/core/src/main/java/google/registry/rdap/RdapSearchActionBase.java @@ -33,7 +33,6 @@ import google.registry.request.Parameter; import google.registry.request.ParameterMap; import jakarta.inject.Inject; import jakarta.persistence.criteria.CriteriaBuilder; -import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; import java.util.ArrayList; @@ -257,14 +256,10 @@ public abstract class RdapSearchActionBase extends RdapActionBase { private void appendParameter( StringBuilder stringBuilder, String name, String value, boolean first) { - try { - stringBuilder.append(first ? '?' : '&'); - stringBuilder.append(URLEncoder.encode(name, "UTF-8")); - stringBuilder.append('='); - stringBuilder.append(URLEncoder.encode(value, "UTF-8")); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } + stringBuilder.append(first ? '?' : '&'); + stringBuilder.append(URLEncoder.encode(name, UTF_8)); + stringBuilder.append('='); + stringBuilder.append(URLEncoder.encode(value, UTF_8)); } /** Creates the URL for this same search with a different starting point cursor. */ diff --git a/core/src/main/java/google/registry/rdap/RdapSearchResults.java b/core/src/main/java/google/registry/rdap/RdapSearchResults.java index b87ea0783..26e06bfad 100644 --- a/core/src/main/java/google/registry/rdap/RdapSearchResults.java +++ b/core/src/main/java/google/registry/rdap/RdapSearchResults.java @@ -45,15 +45,11 @@ abstract class RdapSearchResults { abstract ImmutableMap navigationLinks(); @JsonableElement("notices") ImmutableList getIncompletenessWarnings() { - switch (incompletenessWarningType()) { - case TRUNCATED: - return TRUNCATION_NOTICES; - case MIGHT_BE_INCOMPLETE: - return POSSIBLY_INCOMPLETE_NOTICES; - case COMPLETE: - break; - } - return ImmutableList.of(); + return switch (incompletenessWarningType()) { + case TRUNCATED -> TRUNCATION_NOTICES; + case MIGHT_BE_INCOMPLETE -> POSSIBLY_INCOMPLETE_NOTICES; + case COMPLETE -> ImmutableList.of(); + }; } /** diff --git a/core/src/main/java/google/registry/rde/DomainToXjcConverter.java b/core/src/main/java/google/registry/rde/DomainToXjcConverter.java index 89f4be1a0..de95f343a 100644 --- a/core/src/main/java/google/registry/rde/DomainToXjcConverter.java +++ b/core/src/main/java/google/registry/rde/DomainToXjcConverter.java @@ -141,7 +141,7 @@ final class DomainToXjcConverter { } switch (mode) { - case FULL: + case FULL -> { // o Zero or more OPTIONAL element to represent // "pendingDelete" sub-statuses, including "redemptionPeriod", // "pendingRestore", and "pendingDelete", that a domain name can be @@ -206,10 +206,8 @@ final class DomainToXjcConverter { bean.setTrnData(convertTransferData(model.getTransferData())); } } - - break; - case THIN: - break; + } + case THIN -> {} } return bean; diff --git a/core/src/main/java/google/registry/rde/RdeMarshaller.java b/core/src/main/java/google/registry/rde/RdeMarshaller.java index 0f1a1428b..27acbc6d1 100644 --- a/core/src/main/java/google/registry/rde/RdeMarshaller.java +++ b/core/src/main/java/google/registry/rde/RdeMarshaller.java @@ -170,8 +170,9 @@ public final class RdeMarshaller implements Serializable { } private XmlFragmentMarshaller getMarshaller() { - return memoizedMarshaller != null - ? memoizedMarshaller - : (memoizedMarshaller = XjcXmlTransformer.get().createFragmentMarshaller()); + if (memoizedMarshaller == null) { + memoizedMarshaller = XjcXmlTransformer.get().createFragmentMarshaller(); + } + return memoizedMarshaller; } } diff --git a/core/src/main/java/google/registry/rde/RdeReportAction.java b/core/src/main/java/google/registry/rde/RdeReportAction.java index cc50c01d9..154702c70 100644 --- a/core/src/main/java/google/registry/rde/RdeReportAction.java +++ b/core/src/main/java/google/registry/rde/RdeReportAction.java @@ -99,10 +99,9 @@ public final class RdeReportAction implements Runnable, EscrowTask { RdeRevision.getCurrentRevision(tld, watermark, FULL) .orElseThrow( () -> new IllegalStateException("RdeRevision was not set on generated deposit")); - if (prefix.isEmpty()) { - prefix = Optional.of(findMostRecentPrefixForWatermark(watermark, bucket, tld, gcsUtils)); - } - String name = prefix.get() + RdeNamingUtils.makeRydeFilename(tld, watermark, FULL, 1, revision); + var actualPrefix = + prefix.orElseGet(() -> findMostRecentPrefixForWatermark(watermark, bucket, tld, gcsUtils)); + String name = actualPrefix + RdeNamingUtils.makeRydeFilename(tld, watermark, FULL, 1, revision); BlobId reportFilename = BlobId.of(bucket, name + "-report.xml.ghostryde"); verify(gcsUtils.existsAndNotEmpty(reportFilename), "Missing file: %s", reportFilename); reporter.send(readReportFromGcs(reportFilename)); diff --git a/core/src/main/java/google/registry/rde/RdeUploadAction.java b/core/src/main/java/google/registry/rde/RdeUploadAction.java index 36fa46e3f..d1a92b53b 100644 --- a/core/src/main/java/google/registry/rde/RdeUploadAction.java +++ b/core/src/main/java/google/registry/rde/RdeUploadAction.java @@ -136,9 +136,8 @@ public final class RdeUploadAction implements Runnable, EscrowTask { public void runWithLock(final DateTime watermark) throws Exception { // If a prefix is not provided,try to determine the prefix. This should only happen when the RDE // upload cron job runs to catch up any un-retried (i. e. expected) RDE failures. - if (prefix.isEmpty()) { - prefix = Optional.of(findMostRecentPrefixForWatermark(watermark, bucket, tld, gcsUtils)); - } + String actualPrefix = + prefix.orElseGet(() -> findMostRecentPrefixForWatermark(watermark, bucket, tld, gcsUtils)); logger.atInfo().log("Verifying readiness to upload the RDE deposit."); Optional cursor = tm().transact( @@ -175,7 +174,7 @@ public final class RdeUploadAction implements Runnable, EscrowTask { () -> new IllegalStateException("RdeRevision was not set on generated deposit")); final String nameWithoutPrefix = RdeNamingUtils.makeRydeFilename(tld, watermark, FULL, 1, revision); - final String name = prefix.get() + nameWithoutPrefix; + final String name = actualPrefix + nameWithoutPrefix; final BlobId xmlFilename = BlobId.of(bucket, name + ".xml.ghostryde"); final BlobId xmlLengthFilename = BlobId.of(bucket, name + ".xml.length"); BlobId reportFilename = BlobId.of(bucket, name + "-report.xml.ghostryde"); diff --git a/core/src/main/java/google/registry/rde/RdeUploadUrl.java b/core/src/main/java/google/registry/rde/RdeUploadUrl.java index 2cb226067..83cf49ca3 100644 --- a/core/src/main/java/google/registry/rde/RdeUploadUrl.java +++ b/core/src/main/java/google/registry/rde/RdeUploadUrl.java @@ -19,9 +19,9 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Strings.isNullOrEmpty; import com.google.common.collect.ImmutableMap; -import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.Objects; import java.util.Optional; import javax.annotation.Nullable; @@ -147,11 +147,7 @@ final class RdeUploadUrl implements Comparable { * @see URLEncoder#encode(String, String) */ private static String urlencode(String str) { - try { - return URLEncoder.encode(str, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } + return URLEncoder.encode(str, StandardCharsets.UTF_8); } /** @see java.net.URI#compareTo(java.net.URI) */ @@ -164,7 +160,7 @@ final class RdeUploadUrl implements Comparable { @Override public boolean equals(@Nullable Object object) { return object == this - || (object instanceof RdeUploadUrl && Objects.equals(uri, ((RdeUploadUrl) object).uri)); + || (object instanceof RdeUploadUrl rdeUploadUrl && Objects.equals(uri, rdeUploadUrl.uri)); } /** @see java.net.URI#hashCode() */ @@ -199,9 +195,9 @@ final class RdeUploadUrl implements Comparable { @Override public boolean equals(@Nullable Object object) { return object == this - || (object instanceof Protocol - && port == ((Protocol) object).port - && Objects.equals(name, ((Protocol) object).name)); + || (object instanceof Protocol protocol + && port == protocol.port + && Objects.equals(name, protocol.name)); } /** @see Object#hashCode() */ diff --git a/core/src/main/java/google/registry/request/RouterDisplayHelper.java b/core/src/main/java/google/registry/request/RouterDisplayHelper.java index f0855e959..5433e29d8 100644 --- a/core/src/main/java/google/registry/request/RouterDisplayHelper.java +++ b/core/src/main/java/google/registry/request/RouterDisplayHelper.java @@ -148,7 +148,7 @@ public class RouterDisplayHelper { return headerToString(formatString) + String.format("%n") + Streams.stream(routes) - .sorted(Comparator.comparing((Route route) -> route.action().service().ordinal())) + .sorted(Comparator.comparing((Route route) -> route.action().service())) .map(route -> routeToString(route, formatString)) .collect(joining(String.format("%n"))); } diff --git a/core/src/main/java/google/registry/tldconfig/idn/LanguageValidator.java b/core/src/main/java/google/registry/tldconfig/idn/LanguageValidator.java index 0b59e58ba..fa04162c3 100644 --- a/core/src/main/java/google/registry/tldconfig/idn/LanguageValidator.java +++ b/core/src/main/java/google/registry/tldconfig/idn/LanguageValidator.java @@ -21,13 +21,14 @@ import java.util.Optional; @Immutable abstract class LanguageValidator { - /** A registry of all known language validators keyed by their language code. */ - private static final ImmutableMap LANGUAGE_VALIDATORS = - ImmutableMap.of("ja", new JapaneseLanguageValidator()); - /** Return the language validator for the given language code (if one exists). */ static Optional get(String language) { - return Optional.ofNullable(LANGUAGE_VALIDATORS.get(language)); + return Optional.ofNullable(ValidatorsHolder.LANGUAGE_VALIDATORS.get(language)); + } + + private static class ValidatorsHolder { + private static final ImmutableMap LANGUAGE_VALIDATORS = + ImmutableMap.of("ja", new JapaneseLanguageValidator()); } /** Returns true if the label meets the context rules for this language. */ diff --git a/core/src/main/java/google/registry/tmch/NordnVerifyAction.java b/core/src/main/java/google/registry/tmch/NordnVerifyAction.java index 7b2d48432..2f701d6ad 100644 --- a/core/src/main/java/google/registry/tmch/NordnVerifyAction.java +++ b/core/src/main/java/google/registry/tmch/NordnVerifyAction.java @@ -132,17 +132,11 @@ public final class NordnVerifyAction implements Runnable { } for (Entry result : log) { switch (result.getValue().getOutcome()) { - case OK: - break; - case WARNING: - // fall through - case ERROR: - logger.atWarning().log(result.toString()); - break; - default: - logger.atWarning().log( - "LORDN verify task %s: Unexpected outcome: %s", actionLogId, result); - break; + case OK -> {} + case WARNING, ERROR -> logger.atWarning().log(result.toString()); + default -> + logger.atWarning().log( + "LORDN verify task %s: Unexpected outcome: %s", actionLogId, result); } } return log; diff --git a/core/src/main/java/google/registry/tmch/TmchCertificateAuthority.java b/core/src/main/java/google/registry/tmch/TmchCertificateAuthority.java index eb0c666c2..67000e52b 100644 --- a/core/src/main/java/google/registry/tmch/TmchCertificateAuthority.java +++ b/core/src/main/java/google/registry/tmch/TmchCertificateAuthority.java @@ -164,10 +164,10 @@ public final class TmchCertificateAuthority { root.checkValidity(clock.nowUtc().toDate()); return root; } catch (Exception e) { - if (e instanceof GeneralSecurityException) { - throw (GeneralSecurityException) e; - } else if (e instanceof RuntimeException) { - throw (RuntimeException) e; + if (e instanceof GeneralSecurityException generalSecurityException) { + throw generalSecurityException; + } else if (e instanceof RuntimeException runtimeException) { + throw runtimeException; } throw new RuntimeException(e); } @@ -177,10 +177,10 @@ public final class TmchCertificateAuthority { try { return CRL_CACHE.get(tmchCaMode); } catch (Exception e) { - if (e.getCause() instanceof GeneralSecurityException) { - throw (GeneralSecurityException) e.getCause(); - } else if (e instanceof RuntimeException) { - throw (RuntimeException) e; + if (e.getCause() instanceof GeneralSecurityException generalSecurityException) { + throw generalSecurityException; + } else if (e instanceof RuntimeException runtimeException) { + throw runtimeException; } throw new RuntimeException(e); } diff --git a/core/src/main/java/google/registry/tools/CommandUtilities.java b/core/src/main/java/google/registry/tools/CommandUtilities.java index 3f851c1ad..215b199d6 100644 --- a/core/src/main/java/google/registry/tools/CommandUtilities.java +++ b/core/src/main/java/google/registry/tools/CommandUtilities.java @@ -14,8 +14,6 @@ package google.registry.tools; -import static com.google.common.base.Preconditions.checkState; - import com.google.common.base.Ascii; import google.registry.model.EppResource; import google.registry.model.ForeignKeyUtils; @@ -52,10 +50,7 @@ class CommandUtilities { /** Prompts for yes/no input using promptText, defaulting to no. */ static boolean promptForYes(String promptText) { - checkState( - System.console() != null, - "Unable to access stdin (are you running with `gradle registryTool`?), try using -f."); - String input = System.console().readLine(promptText + " (y/N): "); + String input = System.console().readLine("%s (y/N): ", promptText); // Null represents end-of-file (e.g. ^-D) so interpret that as a negative response. return input != null && Ascii.toUpperCase(input).startsWith("Y"); } diff --git a/core/src/main/java/google/registry/tools/ConfirmingCommand.java b/core/src/main/java/google/registry/tools/ConfirmingCommand.java index 38c562af2..18966ed5f 100644 --- a/core/src/main/java/google/registry/tools/ConfirmingCommand.java +++ b/core/src/main/java/google/registry/tools/ConfirmingCommand.java @@ -20,7 +20,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.beust.jcommander.Parameter; import com.google.common.base.Strings; import java.io.PrintStream; -import java.io.UnsupportedEncodingException; /** A {@link Command} that implements a confirmation step before executing. */ public abstract class ConfirmingCommand implements Command { @@ -34,12 +33,8 @@ public abstract class ConfirmingCommand implements Command { public PrintStream errorPrintStream; protected ConfirmingCommand() { - try { - printStream = new PrintStream(System.out, false, UTF_8.name()); - errorPrintStream = new PrintStream(System.err, false, UTF_8.name()); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } + printStream = new PrintStream(System.out, false, UTF_8); + errorPrintStream = new PrintStream(System.err, false, UTF_8); } @Override diff --git a/core/src/main/java/google/registry/tools/GenerateAllocationTokensCommand.java b/core/src/main/java/google/registry/tools/GenerateAllocationTokensCommand.java index c34780f82..dfc6f91f9 100644 --- a/core/src/main/java/google/registry/tools/GenerateAllocationTokensCommand.java +++ b/core/src/main/java/google/registry/tools/GenerateAllocationTokensCommand.java @@ -365,9 +365,8 @@ class GenerateAllocationTokensCommand implements Command { getExistingTokenStrings(ImmutableSet.copyOf(tokenStrings)); checkArgument( existingTokenStrings.isEmpty(), - String.format( - "Cannot create specified tokens; the following tokens already exist: %s", - existingTokenStrings)); + "Cannot create specified tokens; the following tokens already exist: %s", + existingTokenStrings); } private Stream getNextTokenBatch(int tokensSaved) { diff --git a/core/src/main/java/google/registry/tools/GetTldCommand.java b/core/src/main/java/google/registry/tools/GetTldCommand.java index e096f58e5..6a8cfd3b9 100644 --- a/core/src/main/java/google/registry/tools/GetTldCommand.java +++ b/core/src/main/java/google/registry/tools/GetTldCommand.java @@ -24,7 +24,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import google.registry.model.tld.Tld; import jakarta.inject.Inject; import java.io.PrintStream; -import java.io.UnsupportedEncodingException; import java.util.List; /** Command to show a TLD record. */ @@ -39,11 +38,11 @@ final class GetTldCommand implements Command { @Inject ObjectMapper objectMapper; @Override - public void run() throws JsonProcessingException, UnsupportedEncodingException { + public void run() throws JsonProcessingException { // Don't use try-with-resources to manage standard output streams, closing the stream will // cause subsequent output to standard output or standard error to be lost // See: https://errorprone.info/bugpattern/ClosingStandardOutputStreams - PrintStream printStream = new PrintStream(System.out, false, UTF_8.name()); + PrintStream printStream = new PrintStream(System.out, false, UTF_8); for (String tld : assertTldsExist(mainParameters)) { printStream.println(objectMapper.writeValueAsString(Tld.get(tld))); } diff --git a/core/src/main/java/google/registry/tools/ListObjectsCommand.java b/core/src/main/java/google/registry/tools/ListObjectsCommand.java index 3592c2fd5..0343917ea 100644 --- a/core/src/main/java/google/registry/tools/ListObjectsCommand.java +++ b/core/src/main/java/google/registry/tools/ListObjectsCommand.java @@ -79,7 +79,7 @@ abstract class ListObjectsCommand implements CommandWithConnection { params.put(PRINT_HEADER_ROW_PARAM, printHeaderRow); } if (fullFieldNames) { - params.put(FULL_FIELD_NAMES_PARAM, Boolean.TRUE); + params.put(FULL_FIELD_NAMES_PARAM, true); } params.putAll(getParameterMap()); // Call the server and get the response data. diff --git a/core/src/main/java/google/registry/tools/MutatingCommand.java b/core/src/main/java/google/registry/tools/MutatingCommand.java index a39cfec71..a828fbec0 100644 --- a/core/src/main/java/google/registry/tools/MutatingCommand.java +++ b/core/src/main/java/google/registry/tools/MutatingCommand.java @@ -51,13 +51,13 @@ public abstract class MutatingCommand extends ConfirmingCommand { private static class EntityChange { /** The possible types of mutation that can be performed on an entity. */ - public enum ChangeType { + enum ChangeType { CREATE, DELETE, UPDATE; /** Return the ChangeType corresponding to the given combination of version existences. */ - public static ChangeType get(boolean hasOldVersion, boolean hasNewVersion) { + static ChangeType get(boolean hasOldVersion, boolean hasNewVersion) { checkArgument( hasOldVersion || hasNewVersion, "An entity change must have an old version or a new version (or both)"); diff --git a/core/src/main/java/google/registry/tools/RegistryCli.java b/core/src/main/java/google/registry/tools/RegistryCli.java index 038a4ea34..8cde3d973 100644 --- a/core/src/main/java/google/registry/tools/RegistryCli.java +++ b/core/src/main/java/google/registry/tools/RegistryCli.java @@ -220,8 +220,8 @@ final class RegistryCli implements CommandRunner { private void runCommand(Command command) throws Exception { injectReflectively(RegistryToolComponent.class, component, command); - if (command instanceof CommandWithConnection) { - ((CommandWithConnection) command).setConnection(getConnection()); + if (command instanceof CommandWithConnection commandWithConnection) { + commandWithConnection.setConnection(getConnection()); } // Reset the JPA transaction manager after every command to avoid a situation where a test can diff --git a/core/src/main/java/google/registry/ui/server/console/PasswordResetRequestAction.java b/core/src/main/java/google/registry/ui/server/console/PasswordResetRequestAction.java index ba634d610..732e97f5a 100644 --- a/core/src/main/java/google/registry/ui/server/console/PasswordResetRequestAction.java +++ b/core/src/main/java/google/registry/ui/server/console/PasswordResetRequestAction.java @@ -75,12 +75,12 @@ public class PasswordResetRequestAction extends ConsoleApiAction { String destinationEmail; String emailSubject; switch (type) { - case EPP: + case EPP -> { requiredPermission = ConsolePermission.EDIT_REGISTRAR_DETAILS; destinationEmail = getAdminPocEmail(registrarId); emailSubject = "EPP password reset request"; - break; - case REGISTRY_LOCK: + } + case REGISTRY_LOCK -> { checkArgument( passwordResetRequestData.registryLockEmail != null, "Must provide registry lock email to reset"); @@ -88,9 +88,8 @@ public class PasswordResetRequestAction extends ConsoleApiAction { destinationEmail = passwordResetRequestData.registryLockEmail; checkUserExistsWithRegistryLockEmail(destinationEmail); emailSubject = "Registry lock password reset request"; - break; - default: - throw new IllegalArgumentException("Unknown type " + type); + } + default -> throw new IllegalArgumentException("Unknown type " + type); } checkPermission(user, registrarId, requiredPermission); diff --git a/core/src/test/java/google/registry/beam/TestPipelineExtension.java b/core/src/test/java/google/registry/beam/TestPipelineExtension.java index b48d711b4..a4a159408 100644 --- a/core/src/test/java/google/registry/beam/TestPipelineExtension.java +++ b/core/src/test/java/google/registry/beam/TestPipelineExtension.java @@ -111,9 +111,9 @@ public class TestPipelineExtension extends Pipeline private static class PipelineRunEnforcement { @SuppressWarnings("WeakerAccess") - protected boolean enableAutoRunIfMissing; + boolean enableAutoRunIfMissing; - protected final Pipeline pipeline; + final Pipeline pipeline; boolean runAttempted; @@ -129,9 +129,9 @@ public class TestPipelineExtension extends Pipeline runAttempted = true; } - protected void afterPipelineExecution() {} + void afterPipelineExecution() {} - protected void afterUserCodeFinished() { + void afterUserCodeFinished() { if (!runAttempted && enableAutoRunIfMissing) { pipeline.run().waitUntilFinish(); } @@ -346,8 +346,8 @@ public class TestPipelineExtension extends Pipeline verifyPAssertsSucceeded(this, pipelineResult); } catch (RuntimeException exc) { Throwable cause = exc.getCause(); - if (cause instanceof AssertionError) { - throw (AssertionError) cause; + if (cause instanceof AssertionError assertionError) { + throw assertionError; } else { throw exc; } @@ -504,7 +504,7 @@ public class TestPipelineExtension extends Pipeline private static class IsEmptyVisitor extends PipelineVisitor.Defaults { private boolean empty = true; - public boolean isEmpty() { + boolean isEmpty() { return empty; } diff --git a/core/src/test/java/google/registry/export/ExportPremiumTermsActionTest.java b/core/src/test/java/google/registry/export/ExportPremiumTermsActionTest.java index 1b6c24705..457012f6d 100644 --- a/core/src/test/java/google/registry/export/ExportPremiumTermsActionTest.java +++ b/core/src/test/java/google/registry/export/ExportPremiumTermsActionTest.java @@ -55,7 +55,12 @@ public class ExportPremiumTermsActionTest { private static final ImmutableList PREMIUM_NAMES = ImmutableList.of("2048,USD 549", "0,USD 549"); private static final String EXPECTED_FILE_CONTENT = - "# Premium Terms Export Disclaimer\n# TLD: tld\n0, 549.00\n" + "2048, 549.00\n"; + """ + # Premium Terms Export Disclaimer + # TLD: tld + 0, 549.00 + 2048, 549.00 + """; @RegisterExtension final JpaIntegrationTestExtension jpa = diff --git a/core/src/test/java/google/registry/flows/FlowTestCase.java b/core/src/test/java/google/registry/flows/FlowTestCase.java index 4daf414b2..7f157fd01 100644 --- a/core/src/test/java/google/registry/flows/FlowTestCase.java +++ b/core/src/test/java/google/registry/flows/FlowTestCase.java @@ -158,7 +158,7 @@ public abstract class FlowTestCase { assertThat(flowClass).isAssignableTo(MutatingFlow.class); } else { // There's no "isNotAssignableTo" in Truth. - assertWithMessage(flowClass.getSimpleName() + " implements MutatingFlow") + assertWithMessage("%s implements MutatingFlow", flowClass.getSimpleName()) .that(MutatingFlow.class.isAssignableFrom(flowClass)) .isFalse(); } @@ -192,7 +192,7 @@ public abstract class FlowTestCase { } private static BillingBase expandGracePeriod(GracePeriod gracePeriod) { - assertWithMessage("Billing event is present for grace period: " + gracePeriod) + assertWithMessage("Billing event is present for grace period: %s", gracePeriod) .that(gracePeriod.hasBillingEvent()) .isTrue(); return tm().transact( diff --git a/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java b/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java index cb627add4..3cffd5291 100644 --- a/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java +++ b/core/src/test/java/google/registry/model/tld/label/PremiumListTest.java @@ -73,7 +73,7 @@ public class PremiumListTest { BloomFilter bloomFilter = pl.getBloomFilter(); assertThat(bloomFilter.mightContain("notpremium")).isFalse(); for (String label : ImmutableList.of("rich", "lol", "johnny-be-goode", "icann")) { - assertWithMessage(label + " should be a probable premium") + assertWithMessage("%s should be a probable premium", label) .that(bloomFilter.mightContain(label)) .isTrue(); } diff --git a/core/src/test/java/google/registry/model/tld/label/ReservedListDaoTest.java b/core/src/test/java/google/registry/model/tld/label/ReservedListDaoTest.java index 625fa6880..bbe6b65c3 100644 --- a/core/src/test/java/google/registry/model/tld/label/ReservedListDaoTest.java +++ b/core/src/test/java/google/registry/model/tld/label/ReservedListDaoTest.java @@ -123,7 +123,7 @@ public class ReservedListDaoTest { assertThat(ReservedListDao.getLatestRevision("testlist").isPresent()).isFalse(); ReservedListDao.save(testReservedList); ReservedList persistedList = ReservedListDao.getLatestRevision("testlist").get(); - assertThat(persistedList.getRevisionId()).isNotNull(); + assertThat(persistedList.getRevisionId()).isAtLeast(1L); assertThat(persistedList.getCreationTimestamp()).isEqualTo(fakeClock.nowUtc()); assertThat(persistedList.getName()).isEqualTo("testlist"); assertThat(persistedList.getReservedListEntries()).containsExactlyEntriesIn(testReservations); @@ -143,7 +143,7 @@ public class ReservedListDaoTest { .build()); ReservedListDao.save(testReservedList); ReservedList persistedList = ReservedListDao.getLatestRevision("testlist").get(); - assertThat(persistedList.getRevisionId()).isNotNull(); + assertThat(persistedList.getRevisionId()).isAtLeast(1L); assertThat(persistedList.getCreationTimestamp()).isEqualTo(fakeClock.nowUtc()); assertThat(persistedList.getName()).isEqualTo("testlist"); assertThat(persistedList.getReservedListEntries()).containsExactlyEntriesIn(testReservations); diff --git a/core/src/test/java/google/registry/persistence/converter/DateTimeConverterTest.java b/core/src/test/java/google/registry/persistence/converter/DateTimeConverterTest.java index 59cea45a0..a6c036038 100644 --- a/core/src/test/java/google/registry/persistence/converter/DateTimeConverterTest.java +++ b/core/src/test/java/google/registry/persistence/converter/DateTimeConverterTest.java @@ -99,7 +99,7 @@ public class DateTimeConverterTest { DateTime dt; - public TestEntity() {} + TestEntity() {} TestEntity(String name, DateTime dt) { this.name = name; diff --git a/core/src/test/java/google/registry/persistence/converter/LocalDateConverterTest.java b/core/src/test/java/google/registry/persistence/converter/LocalDateConverterTest.java index 32d36bdd9..fe8548f0b 100644 --- a/core/src/test/java/google/registry/persistence/converter/LocalDateConverterTest.java +++ b/core/src/test/java/google/registry/persistence/converter/LocalDateConverterTest.java @@ -67,7 +67,7 @@ public class LocalDateConverterTest { LocalDate date; - public LocalDateConverterTestEntity() {} + LocalDateConverterTestEntity() {} LocalDateConverterTestEntity(LocalDate date) { this.date = date; diff --git a/core/src/test/java/google/registry/persistence/transaction/JpaTestExtensionsSqlLoggingTest.java b/core/src/test/java/google/registry/persistence/transaction/JpaTestExtensionsSqlLoggingTest.java index 99b2f593c..a394143d1 100644 --- a/core/src/test/java/google/registry/persistence/transaction/JpaTestExtensionsSqlLoggingTest.java +++ b/core/src/test/java/google/registry/persistence/transaction/JpaTestExtensionsSqlLoggingTest.java @@ -41,7 +41,8 @@ class JpaTestExtensionsSqlLoggingTest { @BeforeEach void beforeEach() { orgStdout = System.out; - System.setOut(new PrintStream(stdoutBuffer = new ByteArrayOutputStream())); + stdoutBuffer = new ByteArrayOutputStream(); + System.setOut(new PrintStream(stdoutBuffer)); } @AfterEach @@ -56,6 +57,6 @@ class JpaTestExtensionsSqlLoggingTest { tm().getEntityManager() .createNativeQuery("select 1", long.class) .getSingleResult()); - assertThat(stdoutBuffer.toString(UTF_8.name())).contains("select 1"); + assertThat(stdoutBuffer.toString(UTF_8)).contains("select 1"); } } diff --git a/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerImplTest.java b/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerImplTest.java index bbdd60cbd..78b6f2957 100644 --- a/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerImplTest.java +++ b/core/src/test/java/google/registry/persistence/transaction/JpaTransactionManagerImplTest.java @@ -906,12 +906,12 @@ class JpaTransactionManagerImplTest { } @Id - public String getNameField() { + String getNameField() { return name; } @Id - public int getAgeField() { + int getAgeField() { return age; } diff --git a/core/src/test/java/google/registry/persistence/transaction/QueryComposerTest.java b/core/src/test/java/google/registry/persistence/transaction/QueryComposerTest.java index a0508741e..5a5623e39 100644 --- a/core/src/test/java/google/registry/persistence/transaction/QueryComposerTest.java +++ b/core/src/test/java/google/registry/persistence/transaction/QueryComposerTest.java @@ -49,7 +49,7 @@ public class QueryComposerTest { .withEntityClass(TestEntity.class) .buildUnitTestExtension(); - public QueryComposerTest() {} + QueryComposerTest() {} @BeforeEach void setUp() { @@ -324,18 +324,18 @@ public class QueryComposerTest { @Column(name = "some_value") private int val; - public TestEntity() {} + TestEntity() {} - public TestEntity(String name, int val) { + TestEntity(String name, int val) { this.name = name; this.val = val; } - public int getVal() { + int getVal() { return val; } - public String getName() { + String getName() { return name; } } diff --git a/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java b/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java index 22deba985..1979d0070 100644 --- a/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java +++ b/core/src/test/java/google/registry/rdap/RdapActionBaseTest.java @@ -64,7 +64,7 @@ class RdapActionBaseTest extends RdapActionBaseTestCase toMap() { + Map toMap() { Map builder = new HashMap<>(); builder.put("taskName", taskName); builder.put("method", method); diff --git a/core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java b/core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java index f3be22699..3a929943c 100644 --- a/core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java +++ b/core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java @@ -226,8 +226,8 @@ public final class FullFieldsTestEntityHelper { .setBySuperuser(false) .setReason(reason) .setRequestedByRegistrar(false); - if (builder instanceof DomainHistory.Builder) { - ((DomainHistory.Builder) builder).setPeriod(period); + if (builder instanceof DomainHistory.Builder domainHistoryBuilder) { + domainHistoryBuilder.setPeriod(period); } return builder.build(); } diff --git a/core/src/test/java/google/registry/testing/GpgSystemCommandExtension.java b/core/src/test/java/google/registry/testing/GpgSystemCommandExtension.java index 62985cb0d..cbc893c2e 100644 --- a/core/src/test/java/google/registry/testing/GpgSystemCommandExtension.java +++ b/core/src/test/java/google/registry/testing/GpgSystemCommandExtension.java @@ -110,8 +110,7 @@ public final class GpgSystemCommandExtension implements BeforeEachCallback, Afte publicKeyring.copyTo(pid.getOutputStream()); pid.getOutputStream().close(); int returnValue = pid.waitFor(); - assertWithMessage( - String.format("Failed to import public keyring: \n%s", slurp(pid.getErrorStream()))) + assertWithMessage("Failed to import public keyring: \n%s", slurp(pid.getErrorStream())) .that(returnValue) .isEqualTo(0); @@ -119,8 +118,7 @@ public final class GpgSystemCommandExtension implements BeforeEachCallback, Afte privateKeyring.copyTo(pid.getOutputStream()); pid.getOutputStream().close(); returnValue = pid.waitFor(); - assertWithMessage( - String.format("Failed to import private keyring: \n%s", slurp(pid.getErrorStream()))) + assertWithMessage("Failed to import private keyring: \n%s", slurp(pid.getErrorStream())) .that(returnValue) .isEqualTo(0); } diff --git a/core/src/test/java/google/registry/testing/LogsSubject.java b/core/src/test/java/google/registry/testing/LogsSubject.java index e2c72f994..553579f6f 100644 --- a/core/src/test/java/google/registry/testing/LogsSubject.java +++ b/core/src/test/java/google/registry/testing/LogsSubject.java @@ -87,7 +87,7 @@ public class LogsSubject extends Subject { for (String messageCandidate : messagesAtLevel) { if (messageCandidate.contains(message)) { return new Which<>( - assertWithMessage(String.format("log message at %s matching '%s'", level, message)) + assertWithMessage("log message at %s matching '%s'", level, message) .that(messageCandidate)); } } diff --git a/core/src/test/java/google/registry/testing/UriParameters.java b/core/src/test/java/google/registry/testing/UriParameters.java index 336fa85f8..c835ef28a 100644 --- a/core/src/test/java/google/registry/testing/UriParameters.java +++ b/core/src/test/java/google/registry/testing/UriParameters.java @@ -19,7 +19,6 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap; -import java.io.UnsupportedEncodingException; import java.net.URLDecoder; /** @@ -65,15 +64,13 @@ public final class UriParameters { private static String decodeString(String str, int start, int end) { try { - return URLDecoder.decode(str.substring(start, end), UTF_8.name()); + return URLDecoder.decode(str.substring(start, end), UTF_8); } catch (IllegalArgumentException iae) { // According to the javadoc of URLDecoder, when the input string is // illegal, it could either leave the illegal characters alone or throw // an IllegalArgumentException! To deal with both consistently, we // ignore IllegalArgumentException and just return the original string. return str.substring(start, end); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); } } diff --git a/core/src/test/java/google/registry/tools/CommandTestCase.java b/core/src/test/java/google/registry/tools/CommandTestCase.java index e2060506d..809cc1a9f 100644 --- a/core/src/test/java/google/registry/tools/CommandTestCase.java +++ b/core/src/test/java/google/registry/tools/CommandTestCase.java @@ -18,6 +18,7 @@ import static com.google.common.collect.Iterables.concat; import static com.google.common.collect.Iterables.toArray; import static com.google.common.truth.Truth.assertThat; import static google.registry.persistence.transaction.TransactionManagerFactory.tm; +import static java.nio.charset.StandardCharsets.US_ASCII; import static java.nio.charset.StandardCharsets.UTF_8; import com.beust.jcommander.JCommander; @@ -83,9 +84,9 @@ public abstract class CommandTestCase { // Capture standard output/error. Use a single-byte encoding to emulate platforms where default // charset is not UTF_8. oldStdout = System.out; - System.setOut(new PrintStream(new OutputSplitter(System.out, stdout), false, "US-ASCII")); + System.setOut(new PrintStream(new OutputSplitter(System.out, stdout), false, US_ASCII)); oldStderr = System.err; - System.setErr(new PrintStream(new OutputSplitter(System.err, stderr), false, "US-ASCII")); + System.setErr(new PrintStream(new OutputSplitter(System.err, stderr), false, US_ASCII)); } @AfterEach diff --git a/core/src/test/java/google/registry/tools/EppToolVerifier.java b/core/src/test/java/google/registry/tools/EppToolVerifier.java index ac7b6ff44..bafdb61e4 100644 --- a/core/src/test/java/google/registry/tools/EppToolVerifier.java +++ b/core/src/test/java/google/registry/tools/EppToolVerifier.java @@ -183,7 +183,7 @@ public class EppToolVerifier { assertThat(map).containsEntry("dryRun", Boolean.toString(dryRun)); assertThat(map).containsEntry("clientId", registrarId); assertThat(map).containsEntry("superuser", Boolean.toString(superuser)); - return URLDecoder.decode(map.get("xml"), UTF_8.toString()); + return URLDecoder.decode(map.get("xml"), UTF_8); } private EppToolVerifier verifySentContents(String expectedXmlContent) throws Exception { diff --git a/core/src/test/java/google/registry/tools/GenerateSqlErDiagramCommandTest.java b/core/src/test/java/google/registry/tools/GenerateSqlErDiagramCommandTest.java index fb0e1849e..140dd89fe 100644 --- a/core/src/test/java/google/registry/tools/GenerateSqlErDiagramCommandTest.java +++ b/core/src/test/java/google/registry/tools/GenerateSqlErDiagramCommandTest.java @@ -19,7 +19,6 @@ import static com.google.common.truth.Truth.assertWithMessage; import static google.registry.tools.GenerateSqlErDiagramCommand.FLYWAY_FILE_ELEMENT_ID; import static google.registry.tools.GenerateSqlErDiagramCommand.getLastFlywayFileName; -import com.google.common.base.Joiner; import google.registry.util.ResourceUtils; import java.nio.charset.StandardCharsets; import java.nio.file.Path; @@ -33,15 +32,14 @@ class GenerateSqlErDiagramCommandTest extends CommandTestCase(elementName, map.isEmpty() ? "" : map); } - if (obj instanceof JSONArray) { + if (obj instanceof JSONArray jsonArray) { // Another problem resulting from JSONification: If the array contains elements whose names // are the same before URI expansion, but different after URI expansion, because they use // xmlns attribute that define the namespaces differently, we will screw up. Again, hopefully @@ -220,9 +220,9 @@ public class XmlTestUtils { // hands and just assume that the URI expansion of the first element holds for all others. Set set = new HashSet<>(); String mappedKey = null; - for (int i = 0; i < ((JSONArray) obj).length(); ++i) { + for (int i = 0; i < jsonArray.length(); ++i) { Map.Entry simpleEntry = - normalize(null, ((JSONArray) obj).get(i), path, ignoredPaths, nsMap); + normalize(null, jsonArray.get(i), path, ignoredPaths, nsMap); if (i == 0) { mappedKey = simpleEntry.getKey(); } @@ -233,8 +233,8 @@ public class XmlTestUtils { if (obj instanceof Number) { return new AbstractMap.SimpleEntry<>(null, obj.toString()); } - if (obj instanceof Boolean) { - return new AbstractMap.SimpleEntry<>(null, ((Boolean) obj) ? "1" : "0"); + if (obj instanceof Boolean b) { + return new AbstractMap.SimpleEntry<>(null, b ? "1" : "0"); } if (obj instanceof String) { // Turn stringified booleans into integers. Both are acceptable as xml boolean values, but diff --git a/java_common.gradle b/java_common.gradle index 5290c2894..f3b3c7b1e 100644 --- a/java_common.gradle +++ b/java_common.gradle @@ -99,14 +99,6 @@ tasks.withType(Test).configureEach { } systemProperty gcp_integration_env_property, targetEnv } - - // This environment variable along with testcontainers 1.15.2 works around - // a race condition introduced in 1.15.0. This can be removed once httpclient5 - // becomes the default transport type in testcontainers, which may happen - // in 1.16.x. - // See https://github.com/testcontainers/testcontainers-java/issues/3531 - // for more information. - environment('TESTCONTAINERS_TRANSPORT_TYPE', 'httpclient5') } tasks.withType(JavaCompile).configureEach { @@ -124,9 +116,7 @@ tasks.withType(JavaCompile).configureEach { // Allow unused methods in tests. options.errorprone.disable("UnusedMethod") // Allow unused variables in tests. - // TODO(b/498588847): uncomment below when the global suppression - // below is removed. - // options.errorprone.disable("UnusedVariable") + options.errorprone.disable("UnusedVariable") } // Allow using non-constant strings in log. options.errorprone.disable("FloggerLogString") @@ -140,31 +130,8 @@ tasks.withType(JavaCompile).configureEach { options.errorprone.disable("LongDoubleConversion") // Allow import of commonly-used names such as "Type". options.errorprone.disable("BadImport") - - // TODO(b/498588847): Review suppressed checks below - // Disable new checks in 2.48.0 that break the build with -Werror - options.errorprone.disable("ExpensiveLenientFormatString") - options.errorprone.disable("EnumOrdinal") - // Triggered by JapaneseLanguageValidator - options.errorprone.disable("ClassInitializationDeadlock") - // Allow unused variables globally. - options.errorprone.disable("UnusedVariable") - options.errorprone.disable("AnnotateFormatMethod") - options.errorprone.disable("EffectivelyPrivate") - options.errorprone.disable("JdkObsolete") - options.errorprone.disable("ImpossibleNullComparison") + // Allow assignment to injected variables: too many to fix. options.errorprone.disable("UnnecessaryAssignment") - options.errorprone.disable("PatternMatchingInstanceof") - options.errorprone.disable("IntLiteralCast") - options.errorprone.disable("SystemConsoleNull") - options.errorprone.disable("FormatStringShouldUsePlaceholders") - options.errorprone.disable("BooleanLiteral") - options.errorprone.disable("StatementSwitchToExpressionSwitch") - options.errorprone.disable("AssignmentExpression") - options.errorprone.disable("JavaDurationGetSecondsToToSeconds") - options.errorprone.disable("StringConcatToTextBlock") - options.errorprone.disable("TruthConstantAsserts") - options.errorprone.disable("NullArgumentForNonNullParameter") options.errorprone.disableWarningsInGeneratedCode = true options.errorprone.errorproneArgumentProviders.add([ diff --git a/networking/src/main/java/google/registry/networking/handler/SslServerInitializer.java b/networking/src/main/java/google/registry/networking/handler/SslServerInitializer.java index a35df2270..8348cdd49 100644 --- a/networking/src/main/java/google/registry/networking/handler/SslServerInitializer.java +++ b/networking/src/main/java/google/registry/networking/handler/SslServerInitializer.java @@ -152,9 +152,8 @@ public class SslServerInitializer extends ChannelInitializer< PublicKey clientPublicKey = clientCertificate.getPublicKey(); // Note that for non-RSA keys the length would be -1. int clientCertificateLength = -1; - if (clientPublicKey instanceof RSAPublicKey) { - clientCertificateLength = - ((RSAPublicKey) clientPublicKey).getModulus().bitLength(); + if (clientPublicKey instanceof RSAPublicKey rsaPublicKey) { + clientCertificateLength = rsaPublicKey.getModulus().bitLength(); } logger.atInfo().log( """ diff --git a/prober/src/main/java/google/registry/monitoring/blackbox/message/EppMessage.java b/prober/src/main/java/google/registry/monitoring/blackbox/message/EppMessage.java index a1d884c59..163a02165 100644 --- a/prober/src/main/java/google/registry/monitoring/blackbox/message/EppMessage.java +++ b/prober/src/main/java/google/registry/monitoring/blackbox/message/EppMessage.java @@ -26,7 +26,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; -import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.Collections; import java.util.HashMap; @@ -302,12 +301,9 @@ public class EppMessage { throw new EppClientException("unknown error converting Document to intermediate string"); } String encoding = xml.getXmlEncoding(); - // this is actually not a problem since we can just use the default - if (encoding == null) { - encoding = Charset.defaultCharset().name(); - } - return resultString.getBytes(encoding); - } catch (TransformerException | UnsupportedEncodingException e) { + Charset charset = (encoding == null) ? Charset.defaultCharset() : Charset.forName(encoding); + return resultString.getBytes(charset); + } catch (TransformerException e) { throw new EppClientException(e); } } diff --git a/proxy/src/main/java/google/registry/proxy/handler/ProxyProtocolHandler.java b/proxy/src/main/java/google/registry/proxy/handler/ProxyProtocolHandler.java index 44d42c3af..6a314abdb 100644 --- a/proxy/src/main/java/google/registry/proxy/handler/ProxyProtocolHandler.java +++ b/proxy/src/main/java/google/registry/proxy/handler/ProxyProtocolHandler.java @@ -114,8 +114,8 @@ public class ProxyProtocolHandler extends ByteToMessageDecoder { private static String getSourceIP(ChannelHandlerContext ctx) { SocketAddress remoteAddress = ctx.channel().remoteAddress(); - return (remoteAddress instanceof InetSocketAddress) - ? ((InetSocketAddress) remoteAddress).getAddress().getHostAddress() + return (remoteAddress instanceof InetSocketAddress inetSocketAddress) + ? inetSocketAddress.getAddress().getHostAddress() : null; } diff --git a/proxy/src/main/java/google/registry/proxy/handler/RelayHandler.java b/proxy/src/main/java/google/registry/proxy/handler/RelayHandler.java index 8eea83b7a..eed578111 100644 --- a/proxy/src/main/java/google/registry/proxy/handler/RelayHandler.java +++ b/proxy/src/main/java/google/registry/proxy/handler/RelayHandler.java @@ -93,8 +93,8 @@ public class RelayHandler extends SimpleChannelInboundHandler { // to zero and its buffer will be freed. After the buffer is freed, the message cannot be used // anymore, even if in Java's eye the object still exist, its content is gone. We increment a // count here so that the message can be retried, in case the relay is not successful. - if (msg instanceof ReferenceCounted) { - ((ReferenceCounted) msg).retain(); + if (msg instanceof ReferenceCounted referenceCounted) { + referenceCounted.retain(); } ChannelFuture unusedFuture = relayChannel diff --git a/proxy/src/test/java/google/registry/proxy/TestUtils.java b/proxy/src/test/java/google/registry/proxy/TestUtils.java index 3ccde2d87..c4ae6ad95 100644 --- a/proxy/src/test/java/google/registry/proxy/TestUtils.java +++ b/proxy/src/test/java/google/registry/proxy/TestUtils.java @@ -150,8 +150,8 @@ public final class TestUtils { private static void assertHttpMessageEquivalent(HttpMessage msg1, HttpMessage msg2) { assertThat(msg1.protocolVersion()).isEqualTo(msg2.protocolVersion()); assertThat(msg1.headers()).isEqualTo(msg2.headers()); - if (msg1 instanceof FullHttpRequest && msg2 instanceof FullHttpRequest) { - assertThat(((FullHttpRequest) msg1).content()).isEqualTo(((FullHttpRequest) msg2).content()); + if (msg1 instanceof FullHttpRequest req1 && msg2 instanceof FullHttpRequest req2) { + assertThat(req1.content()).isEqualTo(req2.content()); } } diff --git a/proxy/src/test/java/google/registry/proxy/quota/TokenStoreTest.java b/proxy/src/test/java/google/registry/proxy/quota/TokenStoreTest.java index 06591d191..5e6dfa8c8 100644 --- a/proxy/src/test/java/google/registry/proxy/quota/TokenStoreTest.java +++ b/proxy/src/test/java/google/registry/proxy/quota/TokenStoreTest.java @@ -302,8 +302,7 @@ class TokenStoreTest { // Verify that a task is scheduled. ArgumentCaptor argument = ArgumentCaptor.forClass(Runnable.class); verify(refreshExecutor) - .scheduleWithFixedDelay( - argument.capture(), eq((long) 5), eq((long) 5), eq(TimeUnit.SECONDS)); + .scheduleWithFixedDelay(argument.capture(), eq(5L), eq(5L), eq(TimeUnit.SECONDS)); // Verify that the scheduled task calls TokenStore.refresh(). argument.getValue().run(); diff --git a/util/src/main/java/google/registry/util/PreconditionsUtils.java b/util/src/main/java/google/registry/util/PreconditionsUtils.java index 68f5fcf3b..9d3eef745 100644 --- a/util/src/main/java/google/registry/util/PreconditionsUtils.java +++ b/util/src/main/java/google/registry/util/PreconditionsUtils.java @@ -16,6 +16,8 @@ package google.registry.util; import static com.google.common.base.Preconditions.checkArgument; +import com.google.errorprone.annotations.FormatMethod; +import com.google.errorprone.annotations.FormatString; import java.util.Optional; import javax.annotation.Nullable; @@ -41,9 +43,10 @@ public class PreconditionsUtils { } /** Checks whether the provided reference is null, throws IAE if it is, and returns it if not. */ + @FormatMethod public static T checkArgumentNotNull( @Nullable T reference, - @Nullable String errorMessageTemplate, + @Nullable @FormatString String errorMessageTemplate, @Nullable Object... errorMessageArgs) { checkArgument(reference != null, errorMessageTemplate, errorMessageArgs); return reference; @@ -65,9 +68,10 @@ public class PreconditionsUtils { } /** Checks if the provided Optional is present, returns its value if so, and throws IAE if not. */ + @FormatMethod public static T checkArgumentPresent( @Nullable Optional reference, - @Nullable String errorMessageTemplate, + @Nullable @FormatString String errorMessageTemplate, @Nullable Object... errorMessageArgs) { checkArgumentNotNull(reference, errorMessageTemplate, errorMessageArgs); checkArgument(reference.isPresent(), errorMessageTemplate, errorMessageArgs); diff --git a/util/src/main/java/google/registry/util/SqlTemplate.java b/util/src/main/java/google/registry/util/SqlTemplate.java index 13de4a97c..3779da4fd 100644 --- a/util/src/main/java/google/registry/util/SqlTemplate.java +++ b/util/src/main/java/google/registry/util/SqlTemplate.java @@ -81,9 +81,9 @@ public final class SqlTemplate { String key = matcher.group(2); String rightQuote = matcher.group(3); String value = substitutions.get(key); - checkArgumentNotNull(value, "%%s% found in template but no substitution specified", key); + checkArgumentNotNull(value, "%s found in template but no substitution specified", wholeMatch); checkArgument(leftQuote.equals(rightQuote), "Quote mismatch: %s", wholeMatch); - matcher.appendReplacement(result, String.format("%s%s%s", leftQuote, value, rightQuote)); + matcher.appendReplacement(result, leftQuote + value + rightQuote); found.add(key); } matcher.appendTail(result); diff --git a/util/src/test/java/google/registry/util/SerializeUtilsTest.java b/util/src/test/java/google/registry/util/SerializeUtilsTest.java index 2b75cf460..fe2bd13b6 100644 --- a/util/src/test/java/google/registry/util/SerializeUtilsTest.java +++ b/util/src/test/java/google/registry/util/SerializeUtilsTest.java @@ -82,7 +82,7 @@ class SerializeUtilsTest { @Test void testStringifyParse_longValue_maintainsValue() { - assertThat(parse(Serializable.class, stringify((long) 12345))).isEqualTo((long) 12345); + assertThat(parse(Serializable.class, stringify(12345L))).isEqualTo(12345L); } @Test