diff --git a/changes.md b/changes.md index d2ba7cc7e8..886ac59a5e 100644 --- a/changes.md +++ b/changes.md @@ -5,6 +5,8 @@ Changes log - Bugs fixed - Slf4j bridge reports wrong line number and caller class in log4j. Issue #233. - When GET is an allowed method of a server resource, HEAD is now also listed (e.g. in the Allow header of a 405 response). Issue #266. + - Misc + - Pinned the Maven Deploy plugin to version 3.2.0 (avoids resolving incompatible Maven 4 beta versions). - 3.0 Milestone 1 (10-11-2026) - Breaking changes diff --git a/org.restlet.ext.gson/src/main/java/org/restlet/ext/gson/GsonConverter.java b/org.restlet.ext.gson/src/main/java/org/restlet/ext/gson/GsonConverter.java index e9643b9f58..ff90d455bf 100644 --- a/org.restlet.ext.gson/src/main/java/org/restlet/ext/gson/GsonConverter.java +++ b/org.restlet.ext.gson/src/main/java/org/restlet/ext/gson/GsonConverter.java @@ -121,8 +121,8 @@ public T toObject(Representation source, Class target, Resource resource) // The source for the gson conversion GsonRepresentation gsonSource = null; - if (source instanceof GsonRepresentation) { - gsonSource = (GsonRepresentation) source; + if (source instanceof GsonRepresentation representation) { + gsonSource = representation; } else if (VARIANT_JSON.isCompatible(source)) { gsonSource = create(source, target); } @@ -143,8 +143,8 @@ public T toObject(Representation source, Class target, Resource resource) public Representation toRepresentation(Object source, Variant target, Resource resource) { Representation result = null; - if (source instanceof GsonRepresentation) { - result = (GsonRepresentation) source; + if (source instanceof GsonRepresentation representation) { + result = representation; } else { if (target.getMediaType() == null) { target.setMediaType(MediaType.APPLICATION_JSON); diff --git a/org.restlet.ext.jackson/src/main/java/org/restlet/ext/jackson/JacksonConverter.java b/org.restlet.ext.jackson/src/main/java/org/restlet/ext/jackson/JacksonConverter.java index 70aeaa99b3..654847c726 100644 --- a/org.restlet.ext.jackson/src/main/java/org/restlet/ext/jackson/JacksonConverter.java +++ b/org.restlet.ext.jackson/src/main/java/org/restlet/ext/jackson/JacksonConverter.java @@ -169,8 +169,8 @@ public T toObject(Representation source, Class target, Resource resource) // The source for the Jackson conversion JacksonRepresentation jacksonSource = null; - if (source instanceof JacksonRepresentation) { - jacksonSource = (JacksonRepresentation) source; + if (source instanceof JacksonRepresentation representation) { + jacksonSource = representation; } else if (isCompatible(source)) { jacksonSource = create(source, target); } diff --git a/org.restlet.ext.jackson/src/test/java/org/restlet/ext/jackson/MyException.java b/org.restlet.ext.jackson/src/test/java/org/restlet/ext/jackson/MyException.java index d1d98e378d..9413425ab3 100644 --- a/org.restlet.ext.jackson/src/test/java/org/restlet/ext/jackson/MyException.java +++ b/org.restlet.ext.jackson/src/test/java/org/restlet/ext/jackson/MyException.java @@ -9,11 +9,12 @@ package org.restlet.ext.jackson; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.io.Serial; @JsonIgnoreProperties({"cause", "localizedMessage", "suppressed", "message"}) public class MyException extends Exception { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; @SuppressWarnings("serial") private Customer customer; diff --git a/org.restlet.ext.json/src/main/java/org/restlet/ext/json/JsonConverter.java b/org.restlet.ext.json/src/main/java/org/restlet/ext/json/JsonConverter.java index 092a457224..fa752059f6 100644 --- a/org.restlet.ext.json/src/main/java/org/restlet/ext/json/JsonConverter.java +++ b/org.restlet.ext.json/src/main/java/org/restlet/ext/json/JsonConverter.java @@ -157,17 +157,12 @@ public T toObject(Representation source, Class target, Resource resource) @Override public Representation toRepresentation(Object source, Variant target, Resource resource) { - Representation result = null; - - if (source instanceof JSONArray jsonArray) { - result = new JsonRepresentation(jsonArray); - } else if (source instanceof JSONObject jsonObject) { - result = new JsonRepresentation(jsonObject); - } else if (source instanceof JSONTokener jsonTokener) { - result = new JsonRepresentation(jsonTokener); - } - - return result; + return switch (source) { + case JSONArray jsonArray -> new JsonRepresentation(jsonArray); + case JSONObject jsonObject -> new JsonRepresentation(jsonObject); + case JSONTokener jsonTokener -> new JsonRepresentation(jsonTokener); + case null, default -> null; + }; } @Override diff --git a/org.restlet.ext.json/src/main/java/org/restlet/ext/json/JsonRepresentation.java b/org.restlet.ext.json/src/main/java/org/restlet/ext/json/JsonRepresentation.java index 682b2de57a..931ea3be5d 100644 --- a/org.restlet.ext.json/src/main/java/org/restlet/ext/json/JsonRepresentation.java +++ b/org.restlet.ext.json/src/main/java/org/restlet/ext/json/JsonRepresentation.java @@ -191,27 +191,17 @@ private String getJsonText() throws JSONException { } private String getJsonTextFromJsonValue() { - final String result; - switch (this.jsonValue) { - case final JSONArray jsonArray -> { - if (isIndenting()) { - result = jsonArray.toString(getIndentingSize()); - } else { - result = jsonArray.toString(); - } - } - case final JSONObject jsonObject -> { - if (isIndenting()) { - result = jsonObject.toString(getIndentingSize()); - } else { - result = jsonObject.toString(); - } - } - case final JSONStringer jsonStringer -> result = jsonStringer.toString(); - case final JSONTokener jsonTokener -> result = jsonTokener.toString(); - case null, default -> result = null; - } - return result; + return switch (this.jsonValue) { + case final JSONArray jsonArray when isIndenting() -> + jsonArray.toString(getIndentingSize()); + case final JSONArray jsonArray -> jsonArray.toString(); + case final JSONObject jsonObject when isIndenting() -> + jsonObject.toString(getIndentingSize()); + case final JSONObject jsonObject -> jsonObject.toString(); + case final JSONStringer jsonStringer -> jsonStringer.toString(); + case final JSONTokener jsonTokener -> jsonTokener.toString(); + case null, default -> null; + }; } /** diff --git a/org.restlet.ext.openapi/src/main/java/org/restlet/ext/openapi/internal/OpenApiApplicationException.java b/org.restlet.ext.openapi/src/main/java/org/restlet/ext/openapi/internal/OpenApiApplicationException.java index 35dbea5823..08f5dbce17 100644 --- a/org.restlet.ext.openapi/src/main/java/org/restlet/ext/openapi/internal/OpenApiApplicationException.java +++ b/org.restlet.ext.openapi/src/main/java/org/restlet/ext/openapi/internal/OpenApiApplicationException.java @@ -8,12 +8,13 @@ */ package org.restlet.ext.openapi.internal; +import java.io.Serial; import org.restlet.resource.Status; @Status(500) public class OpenApiApplicationException extends RuntimeException { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; public OpenApiApplicationException(final String message, final Throwable cause) { super(message, cause); diff --git a/org.restlet.ext.slf4j/src/test/java/org/restlet/ext/slf4j/Slf4jLoggerTestCase.java b/org.restlet.ext.slf4j/src/test/java/org/restlet/ext/slf4j/Slf4jLoggerTestCase.java index 76d8dcac5c..5595094659 100644 --- a/org.restlet.ext.slf4j/src/test/java/org/restlet/ext/slf4j/Slf4jLoggerTestCase.java +++ b/org.restlet.ext.slf4j/src/test/java/org/restlet/ext/slf4j/Slf4jLoggerTestCase.java @@ -198,7 +198,7 @@ void testLocationAwareLoggerReceivesCallerBoundary() { for (Object[] call : calls) { assertEquals(Slf4jLogger.class.getName(), call[1]); } - assertEquals(LocationAwareLogger.INFO_INT, calls.get(0)[2]); + assertEquals(LocationAwareLogger.INFO_INT, calls.getFirst()[2]); assertEquals(LocationAwareLogger.WARN_INT, calls.get(1)[2]); assertEquals(LocationAwareLogger.ERROR_INT, calls.get(2)[2]); assertEquals(t, calls.get(2)[5]); diff --git a/org.restlet.ext.spring/src/test/java/org/restlet/ext/spring/SpringBeanRouterTestCase.java b/org.restlet.ext.spring/src/test/java/org/restlet/ext/spring/SpringBeanRouterTestCase.java index 7bb3529fb0..b1da7a16f5 100644 --- a/org.restlet.ext.spring/src/test/java/org/restlet/ext/spring/SpringBeanRouterTestCase.java +++ b/org.restlet.ext.spring/src/test/java/org/restlet/ext/spring/SpringBeanRouterTestCase.java @@ -121,8 +121,8 @@ private Set routeUris(RouteList routes) { Set uris = new HashSet<>(); for (Route actualRoute : routes) { - if (actualRoute instanceof TemplateRoute) { - uris.add(((TemplateRoute) actualRoute).getTemplate().getPattern()); + if (actualRoute instanceof TemplateRoute route) { + uris.add(route.getTemplate().getPattern()); } } diff --git a/org.restlet/src/main/java/org/restlet/engine/application/StatusInfo.java b/org.restlet/src/main/java/org/restlet/engine/application/StatusInfo.java index 8c2dc59dd7..411c0415b3 100644 --- a/org.restlet/src/main/java/org/restlet/engine/application/StatusInfo.java +++ b/org.restlet/src/main/java/org/restlet/engine/application/StatusInfo.java @@ -8,6 +8,7 @@ */ package org.restlet.engine.application; +import java.io.Serial; import java.io.Serializable; import org.restlet.data.Status; @@ -18,7 +19,7 @@ */ public class StatusInfo implements Serializable { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; /** The specification code. */ private volatile int code; diff --git a/org.restlet/src/main/java/org/restlet/engine/local/FileClientHelper.java b/org.restlet/src/main/java/org/restlet/engine/local/FileClientHelper.java index 1bccba7e93..2c7cea8c0a 100644 --- a/org.restlet/src/main/java/org/restlet/engine/local/FileClientHelper.java +++ b/org.restlet/src/main/java/org/restlet/engine/local/FileClientHelper.java @@ -32,7 +32,6 @@ import java.io.RandomAccessFile; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -237,7 +236,7 @@ private static boolean isFileInDirectory(final Directory directory, final File f filePath = fileAbsolute; } - final Path rootDirectoryPath = Paths.get(filePath).normalize(); + final Path rootDirectoryPath = Path.of(filePath).normalize(); final Path actualFilePath = file.toPath().normalize(); result = !rootDirectoryPath.relativize(actualFilePath).toString().startsWith(".."); } @@ -640,23 +639,9 @@ public boolean isResumeUpload() { * @param metadata The metadata. */ private void updateFileExtension(StringBuilder fileName, Metadata metadata) { - boolean defaultMetadata = true; - - if (getMetadataService() != null) { - if (metadata instanceof Language language) { - defaultMetadata = language.equals(getMetadataService().getDefaultLanguage()); - } else if (metadata instanceof MediaType mediaType) { - defaultMetadata = mediaType.equals(getMetadataService().getDefaultMediaType()); - } else if (metadata instanceof CharacterSet characterSet) { - defaultMetadata = - characterSet.equals(getMetadataService().getDefaultCharacterSet()); - } else if (metadata instanceof Encoding encoding) { - defaultMetadata = encoding.equals(getMetadataService().getDefaultEncoding()); - } - } // We only add an extension for metadata that differs from default ones - if (!defaultMetadata) { + if (!isDefaultMetadata(metadata)) { String extension = getMetadataService().getExtension(metadata); if (extension != null) { @@ -668,4 +653,19 @@ private void updateFileExtension(StringBuilder fileName, Metadata metadata) { } } } + + private boolean isDefaultMetadata(Metadata metadata) { + if (getMetadataService() == null) { + return true; + } + return switch (metadata) { + case Language language -> language.equals(getMetadataService().getDefaultLanguage()); + case MediaType mediaType -> + mediaType.equals(getMetadataService().getDefaultMediaType()); + case CharacterSet characterSet -> + characterSet.equals(getMetadataService().getDefaultCharacterSet()); + case Encoding encoding -> encoding.equals(getMetadataService().getDefaultEncoding()); + case null, default -> true; + }; + } } diff --git a/org.restlet/src/main/java/org/restlet/engine/local/LocalClientHelper.java b/org.restlet/src/main/java/org/restlet/engine/local/LocalClientHelper.java index 20366784bd..9123f5e252 100644 --- a/org.restlet/src/main/java/org/restlet/engine/local/LocalClientHelper.java +++ b/org.restlet/src/main/java/org/restlet/engine/local/LocalClientHelper.java @@ -13,7 +13,6 @@ import java.nio.file.FileStore; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.PosixFilePermissions; @@ -167,10 +166,10 @@ private static Path getPrivateTempHomeRoot() { String userHome = System.getProperty("user.home"); if (userHome != null && !userHome.isEmpty()) { - return Paths.get(userHome); + return Path.of(userHome); } - return Paths.get(".").toAbsolutePath().normalize(); + return Path.of(".").toAbsolutePath().normalize(); } private static void setOwnerOnlyAccess(File file, boolean executable) throws IOException { diff --git a/org.restlet/src/main/java/org/restlet/engine/resource/AnnotationInfo.java b/org.restlet/src/main/java/org/restlet/engine/resource/AnnotationInfo.java index bc80b6f63a..4e21e00784 100644 --- a/org.restlet/src/main/java/org/restlet/engine/resource/AnnotationInfo.java +++ b/org.restlet/src/main/java/org/restlet/engine/resource/AnnotationInfo.java @@ -33,7 +33,7 @@ public abstract class AnnotationInfo { * @return The actual type. */ protected static Class getJavaActualType(Class currentClass, String genericTypeName) { - Class result = null; + Class result; // Lookup in the super class result = getJavaActualType(currentClass.getGenericSuperclass(), genericTypeName); @@ -61,9 +61,9 @@ protected static Class getJavaActualType(Type currentType, String genericType Class result = null; if (currentType != null) { - if (currentType instanceof Class) { + if (currentType instanceof Class class1) { // Look in the generic super class or the implemented interfaces - result = getJavaActualType((Class) currentType, genericTypeName); + result = getJavaActualType(class1, genericTypeName); } else if (currentType instanceof final ParameterizedType parameterizedType) { Class rawType = (Class) parameterizedType.getRawType(); Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); @@ -87,22 +87,20 @@ protected static Class getJavaActualType(Type currentType, String genericType * @return The underlying class */ protected static Class getTypeClass(Type type) { - Class result = null; + return switch (type) { + case Class clazz -> clazz; + case ParameterizedType parameterizedType -> + getTypeClass(parameterizedType.getRawType()); + case GenericArrayType genericArrayType -> getArrayTypeClass(genericArrayType); + case null, default -> null; + }; + } - if (type instanceof Class) { - result = (Class) type; - } else if (type instanceof ParameterizedType parameterizedType) { - result = getTypeClass(parameterizedType.getRawType()); - } else if (type instanceof GenericArrayType genericArrayType) { - Type componentType = genericArrayType.getGenericComponentType(); - Class componentClass = getTypeClass(componentType); + private static Class getArrayTypeClass(GenericArrayType genericArrayType) { + Type componentType = genericArrayType.getGenericComponentType(); + Class componentClass = getTypeClass(componentType); - if (componentClass != null) { - result = Array.newInstance(componentClass, 0).getClass(); - } - } - - return result; + return (componentClass == null) ? null : Array.newInstance(componentClass, 0).getClass(); } /** The raw annotation value. */ @@ -130,7 +128,7 @@ protected AnnotationInfo( this.javaClass = javaClass; this.javaMethod = javaMethod; this.annotationValue = annotationValue; - java.lang.reflect.Method m = null; + java.lang.reflect.Method m; try { m = javaClass.getMethod(javaMethod.getName(), javaMethod.getParameterTypes()); diff --git a/org.restlet/src/main/java/org/restlet/engine/resource/ClientInvocationHandler.java b/org.restlet/src/main/java/org/restlet/engine/resource/ClientInvocationHandler.java index 71ebe2dfa9..fdaed440be 100644 --- a/org.restlet/src/main/java/org/restlet/engine/resource/ClientInvocationHandler.java +++ b/org.restlet/src/main/java/org/restlet/engine/resource/ClientInvocationHandler.java @@ -159,8 +159,8 @@ private Class resolveActualType(java.lang.reflect.Method javaMethod, int argI Type genericParameterType = javaMethod.getGenericParameterTypes()[argIndex]; if (genericParameterType instanceof ParameterizedType parameterizedType) { Type firstArg = parameterizedType.getActualTypeArguments()[0]; - if (firstArg instanceof Class) { - return (Class) firstArg; + if (firstArg instanceof Class clazz) { + return clazz; } } return null; diff --git a/org.restlet/src/main/java/org/restlet/engine/util/AlphaNumericComparator.java b/org.restlet/src/main/java/org/restlet/engine/util/AlphaNumericComparator.java index b3d36e5719..081e6ff1e7 100644 --- a/org.restlet/src/main/java/org/restlet/engine/util/AlphaNumericComparator.java +++ b/org.restlet/src/main/java/org/restlet/engine/util/AlphaNumericComparator.java @@ -8,6 +8,8 @@ */ package org.restlet.engine.util; +import java.io.Serial; + /** * Optimized public-domain implementation of a Java alphanumeric sort. * @@ -29,7 +31,7 @@ * @author Rob Heittman, Solertium Corporation */ public class AlphaNumericComparator extends AlphabeticalComparator { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; @Override public int compare(final String uri0, final String uri1) { diff --git a/org.restlet/src/main/java/org/restlet/engine/util/AlphabeticalComparator.java b/org.restlet/src/main/java/org/restlet/engine/util/AlphabeticalComparator.java index 05106a10c3..642de599e6 100644 --- a/org.restlet/src/main/java/org/restlet/engine/util/AlphabeticalComparator.java +++ b/org.restlet/src/main/java/org/restlet/engine/util/AlphabeticalComparator.java @@ -8,6 +8,7 @@ */ package org.restlet.engine.util; +import java.io.Serial; import java.io.Serializable; import java.util.Comparator; import org.restlet.data.Reference; @@ -18,7 +19,7 @@ * @author Jerome Louvel */ public class AlphabeticalComparator implements Comparator, Serializable { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; /** * Compares two references. diff --git a/org.restlet/src/main/java/org/restlet/engine/util/CaseInsensitiveHashSet.java b/org.restlet/src/main/java/org/restlet/engine/util/CaseInsensitiveHashSet.java index 4ee7836744..98beb0b658 100644 --- a/org.restlet/src/main/java/org/restlet/engine/util/CaseInsensitiveHashSet.java +++ b/org.restlet/src/main/java/org/restlet/engine/util/CaseInsensitiveHashSet.java @@ -8,13 +8,14 @@ */ package org.restlet.engine.util; +import java.io.Serial; import java.util.Collection; import java.util.HashSet; /** Implementation of the Set Interface that is case-insensitive. */ public class CaseInsensitiveHashSet extends HashSet { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; /** * Constructor initializing the set with the given collection. diff --git a/org.restlet/src/main/java/org/restlet/engine/util/ImmutableDate.java b/org.restlet/src/main/java/org/restlet/engine/util/ImmutableDate.java index 9194199028..1b7c1dd16e 100644 --- a/org.restlet/src/main/java/org/restlet/engine/util/ImmutableDate.java +++ b/org.restlet/src/main/java/org/restlet/engine/util/ImmutableDate.java @@ -8,6 +8,7 @@ */ package org.restlet.engine.util; +import java.io.Serial; import java.util.Date; /** @@ -20,7 +21,7 @@ */ public final class ImmutableDate extends Date { - private static final long serialVersionUID = -5946186780670229206L; + @Serial private static final long serialVersionUID = -5946186780670229206L; /** * Private constructor. A factory method is provided. diff --git a/org.restlet/src/main/java/org/restlet/engine/util/InternetDateFormat.java b/org.restlet/src/main/java/org/restlet/engine/util/InternetDateFormat.java index 587ab6d657..5daa3c4aae 100644 --- a/org.restlet/src/main/java/org/restlet/engine/util/InternetDateFormat.java +++ b/org.restlet/src/main/java/org/restlet/engine/util/InternetDateFormat.java @@ -8,6 +8,7 @@ */ package org.restlet.engine.util; +import java.io.Serial; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.FieldPosition; @@ -49,7 +50,7 @@ public class InternetDateFormat extends DateFormat { /** The Regex pattern to match. */ private static volatile Pattern pattern; - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; /** A time zone with zero offset and no DST. */ public static final TimeZone UTC = new SimpleTimeZone(0, "Z"); diff --git a/org.restlet/src/main/java/org/restlet/resource/ResourceException.java b/org.restlet/src/main/java/org/restlet/resource/ResourceException.java index 045b663302..db74b8f665 100644 --- a/org.restlet/src/main/java/org/restlet/resource/ResourceException.java +++ b/org.restlet/src/main/java/org/restlet/resource/ResourceException.java @@ -8,6 +8,7 @@ */ package org.restlet.resource; +import java.io.Serial; import org.restlet.Request; import org.restlet.Response; import org.restlet.data.Status; @@ -19,7 +20,7 @@ */ public class ResourceException extends RuntimeException { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; /** The status associated with this exception. */ private transient Status status; diff --git a/org.restlet/src/main/java/org/restlet/routing/Router.java b/org.restlet/src/main/java/org/restlet/routing/Router.java index 71fc2ca677..5123793405 100644 --- a/org.restlet/src/main/java/org/restlet/routing/Router.java +++ b/org.restlet/src/main/java/org/restlet/routing/Router.java @@ -400,8 +400,8 @@ protected int getMatchingMode(Restlet target) { if ((target instanceof Directory) || (target instanceof Router)) { result = Template.MODE_STARTS_WITH; - } else if (target instanceof Filter) { - result = getMatchingMode(((Filter) target).getNext()); + } else if (target instanceof Filter filter) { + result = getMatchingMode(filter.getNext()); } return result; diff --git a/org.restlet/src/main/java/org/restlet/routing/Template.java b/org.restlet/src/main/java/org/restlet/routing/Template.java index 1d0698081e..a8c73fba0c 100644 --- a/org.restlet/src/main/java/org/restlet/routing/Template.java +++ b/org.restlet/src/main/java/org/restlet/routing/Template.java @@ -742,42 +742,25 @@ public int parse(String formattedString, Request request) { * @return The quoted character. */ private String quote(char character) { - switch (character) { - case '[': - return "\\["; - case ']': - return "\\]"; - case '.': - return "\\."; - case '\\': - return "\\\\"; - case '$': - return "\\$"; - case '^': - return "\\^"; - case '?': - return "\\?"; - case '*': - return "\\*"; - case '|': - return "\\|"; - case '(': - return "\\("; - case ')': - return "\\)"; - case ':': - return "\\:"; - case '-': - return "\\-"; - case '!': - return "\\!"; - case '<': - return "\\<"; - case '>': - return "\\>"; - default: - return Character.toString(character); - } + return switch (character) { + case '[' -> "\\["; + case ']' -> "\\]"; + case '.' -> "\\."; + case '\\' -> "\\\\"; + case '$' -> "\\$"; + case '^' -> "\\^"; + case '?' -> "\\?"; + case '*' -> "\\*"; + case '|' -> "\\|"; + case '(' -> "\\("; + case ')' -> "\\)"; + case ':' -> "\\:"; + case '-' -> "\\-"; + case '!' -> "\\!"; + case '<' -> "\\<"; + case '>' -> "\\>"; + default -> Character.toString(character); + }; } /** diff --git a/org.restlet/src/main/java/org/restlet/service/MetadataService.java b/org.restlet/src/main/java/org/restlet/service/MetadataService.java index 7a13e9a4ee..be26c3dfb9 100644 --- a/org.restlet/src/main/java/org/restlet/service/MetadataService.java +++ b/org.restlet/src/main/java/org/restlet/service/MetadataService.java @@ -367,7 +367,7 @@ public void addExtension(String extension, Metadata metadata) { public void addExtension(String extension, Metadata metadata, boolean preferred) { if (preferred) { // Add the mapping at the beginning of the list - this.mappings.add(0, new MetadataExtension(extension, metadata)); + this.mappings.addFirst(new MetadataExtension(extension, metadata)); } else { // Add the mapping at the end of the list this.mappings.add(new MetadataExtension(extension, metadata)); @@ -405,7 +405,7 @@ private void ext( boolean preferred) { if (preferred) { // Add the mapping at the beginning of the list - extensions.add(0, new MetadataExtension(extension, metadata)); + extensions.addFirst(new MetadataExtension(extension, metadata)); } else { // Add the mapping at the end of the list extensions.add(new MetadataExtension(extension, metadata)); diff --git a/org.restlet/src/main/java/org/restlet/util/WrapperList.java b/org.restlet/src/main/java/org/restlet/util/WrapperList.java index 37555f35b9..7a6522a697 100644 --- a/org.restlet/src/main/java/org/restlet/util/WrapperList.java +++ b/org.restlet/src/main/java/org/restlet/util/WrapperList.java @@ -91,12 +91,12 @@ public boolean addAll(int index, Collection elements) { @Override public void addFirst(final E e) { - getDelegate().addFirst(e); + add(0, e); } @Override public void addLast(final E e) { - getDelegate().addLast(e); + add(e); } /** Removes the elements from this list. */ diff --git a/org.restlet/src/test/java/org/restlet/resource/MyBean.java b/org.restlet/src/test/java/org/restlet/resource/MyBean.java index 5a11b8352e..0678a72d91 100644 --- a/org.restlet/src/test/java/org/restlet/resource/MyBean.java +++ b/org.restlet/src/test/java/org/restlet/resource/MyBean.java @@ -8,6 +8,7 @@ */ package org.restlet.resource; +import java.io.Serial; import java.io.Serializable; import java.util.Objects; import org.restlet.engine.util.SystemUtils; @@ -19,7 +20,7 @@ */ public class MyBean implements Serializable { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; private String description; diff --git a/org.restlet/src/test/java/org/restlet/resource/MyException01.java b/org.restlet/src/test/java/org/restlet/resource/MyException01.java index e73bd1fabe..2b0cff6d02 100644 --- a/org.restlet/src/test/java/org/restlet/resource/MyException01.java +++ b/org.restlet/src/test/java/org/restlet/resource/MyException01.java @@ -8,12 +8,13 @@ */ package org.restlet.resource; +import java.io.Serial; import java.util.Date; @Status(value = 400, serialize = false) public class MyException01 extends Throwable { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; private Date date; diff --git a/org.restlet/src/test/java/org/restlet/resource/MyException02.java b/org.restlet/src/test/java/org/restlet/resource/MyException02.java index 6a51f099f9..fd17971eee 100644 --- a/org.restlet/src/test/java/org/restlet/resource/MyException02.java +++ b/org.restlet/src/test/java/org/restlet/resource/MyException02.java @@ -8,10 +8,12 @@ */ package org.restlet.resource; +import java.io.Serial; + @Status(value = 400) public class MyException02 extends Throwable { - private static final long serialVersionUID = 1L; + @Serial private static final long serialVersionUID = 1L; private String customProperty; diff --git a/org.restlet/src/test/java/org/restlet/util/NonNullItemsListTestCase.java b/org.restlet/src/test/java/org/restlet/util/NonNullItemsListTestCase.java index ba8cbef4bf..aa270005bf 100644 --- a/org.restlet/src/test/java/org/restlet/util/NonNullItemsListTestCase.java +++ b/org.restlet/src/test/java/org/restlet/util/NonNullItemsListTestCase.java @@ -39,7 +39,7 @@ void add_nullElement_throwsWithConfiguredMessage() { @Test void addAtIndex_nullElement_throws() { NonNullItemsList list = new NonNullItemsList<>("msg"); - assertThrows(IllegalArgumentException.class, () -> list.add(0, null)); + assertThrows(IllegalArgumentException.class, () -> list.addFirst(null)); } @Test diff --git a/org.restlet/src/test/java/org/restlet/util/ServiceListTestCase.java b/org.restlet/src/test/java/org/restlet/util/ServiceListTestCase.java index 4bd9a51960..bf64c5625a 100644 --- a/org.restlet/src/test/java/org/restlet/util/ServiceListTestCase.java +++ b/org.restlet/src/test/java/org/restlet/util/ServiceListTestCase.java @@ -39,7 +39,7 @@ void addAtIndex_setsServiceContext() { ServiceList list = new ServiceList(context); RangeService service = new RangeService(); - list.add(0, service); + list.addFirst(service); assertEquals(context, service.getContext()); } diff --git a/pom.xml b/pom.xml index c056220313..33f932c1a7 100644 --- a/pom.xml +++ b/pom.xml @@ -534,6 +534,11 @@ maven-install-plugin 3.2.0 + + org.apache.maven.plugins + maven-deploy-plugin + 3.2.0 + org.apache.maven.plugins maven-release-plugin