From 19663b0f3886f0b34bb790e0a7617564d9ce167b Mon Sep 17 00:00:00 2001 From: Athou Date: Mon, 5 Jan 2026 07:19:27 +0100 Subject: [PATCH] Java 25+ is now required --- .../java/com/commafeed/backend/HttpGetter.java | 4 ++-- .../backend/favicon/DefaultFaviconFetcher.java | 2 +- .../InPageReferenceFeedURLProvider.java | 2 +- .../frontend/resource/CategoryREST.java | 2 +- .../frontend/resource/fever/FeverREST.java | 10 +++++----- .../commafeed/backend/feed/FeedUtilsTest.java | 6 +++--- .../backend/service/UserServiceTest.java | 2 +- .../commafeed/integration/rest/CategoryIT.java | 18 +++++++++--------- .../commafeed/integration/rest/FeverIT.java | 12 ++++++------ .../com/commafeed/integration/rest/UserIT.java | 6 +++--- pom.xml | 2 +- 11 files changed, 33 insertions(+), 33 deletions(-) diff --git a/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java b/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java index da492405..7c1bce65 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java @@ -11,8 +11,8 @@ import java.time.InstantSource; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; import java.util.Optional; +import java.util.SequencedMap; import java.util.concurrent.ExecutionException; import java.util.stream.Stream; import java.util.zip.GZIPInputStream; @@ -294,7 +294,7 @@ public class HttpGetter { headers.add(new BasicHeader(HttpHeaders.PRAGMA, "No-cache")); headers.add(new BasicHeader(HttpHeaders.CACHE_CONTROL, "no-cache")); - Map contentDecoderMap = new LinkedHashMap<>(); + SequencedMap contentDecoderMap = new LinkedHashMap<>(); contentDecoderMap.put(ContentCoding.GZIP.token(), GZIPInputStream::new); contentDecoderMap.put(ContentCoding.DEFLATE.token(), DeflateInputStream::new); contentDecoderMap.put(ContentCoding.BROTLI.token(), BrotliInputStream::new); diff --git a/commafeed-server/src/main/java/com/commafeed/backend/favicon/DefaultFaviconFetcher.java b/commafeed-server/src/main/java/com/commafeed/backend/favicon/DefaultFaviconFetcher.java index 878b9bee..db0c0089 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/favicon/DefaultFaviconFetcher.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/favicon/DefaultFaviconFetcher.java @@ -101,7 +101,7 @@ public class DefaultFaviconFetcher extends AbstractFaviconFetcher { return null; } - String href = icons.get(0).attr("abs:href"); + String href = icons.getFirst().attr("abs:href"); if (StringUtils.isBlank(href)) { log.debug("No icon found in page"); return null; diff --git a/commafeed-server/src/main/java/com/commafeed/backend/urlprovider/InPageReferenceFeedURLProvider.java b/commafeed-server/src/main/java/com/commafeed/backend/urlprovider/InPageReferenceFeedURLProvider.java index 4a5a239b..10921967 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/urlprovider/InPageReferenceFeedURLProvider.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/urlprovider/InPageReferenceFeedURLProvider.java @@ -14,7 +14,7 @@ public class InPageReferenceFeedURLProvider implements FeedURLProvider { @Override public List get(String url, String urlContent) { Document doc = Jsoup.parse(urlContent, url); - if (!"html".equals(doc.children().get(0).tagName())) { + if (!"html".equals(doc.children().getFirst().tagName())) { return List.of(); } return Stream.concat(doc.select("link[type=application/atom+xml]").stream(), doc.select("link[type=application/rss+xml]").stream()) diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java index 6c4917de..93ce753b 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/CategoryREST.java @@ -178,7 +178,7 @@ public class CategoryREST { boolean hasMore = entries.getEntries().size() > limit; if (hasMore) { entries.setHasMore(true); - entries.getEntries().remove(entries.getEntries().size() - 1); + entries.getEntries().removeLast(); } entries.setTimestamp(System.currentTimeMillis()); diff --git a/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java b/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java index 903eb043..4f6a4c2b 100644 --- a/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java +++ b/commafeed-server/src/main/java/com/commafeed/frontend/resource/fever/FeverREST.java @@ -94,8 +94,8 @@ public class FeverREST { @Operation(hidden = true) public FeverResponse formUrlencoded(@Context UriInfo uri, @PathParam("userId") Long userId, MultivaluedMap form) { Map params = new HashMap<>(); - uri.getQueryParameters().forEach((k, v) -> params.put(k, v.get(0))); - form.forEach((k, v) -> params.put(k, v.get(0))); + uri.getQueryParameters().forEach((k, v) -> params.put(k, v.getFirst())); + form.forEach((k, v) -> params.put(k, v.getFirst())); return handle(userId, params); } @@ -107,7 +107,7 @@ public class FeverREST { @Operation(hidden = true) public FeverResponse noForm(@Context UriInfo uri, @PathParam("userId") Long userId) { Map params = new HashMap<>(); - uri.getQueryParameters().forEach((k, v) -> params.put(k, v.get(0))); + uri.getQueryParameters().forEach((k, v) -> params.put(k, v.getFirst())); return handle(userId, params); } @@ -119,7 +119,7 @@ public class FeverREST { @Operation(hidden = true) public FeverResponse get(@Context UriInfo uri, @PathParam("userId") Long userId) { Map params = new HashMap<>(); - uri.getQueryParameters().forEach((k, v) -> params.put(k, v.get(0))); + uri.getQueryParameters().forEach((k, v) -> params.put(k, v.getFirst())); return handle(userId, params); } @@ -132,7 +132,7 @@ public class FeverREST { @Operation(hidden = true) public FeverResponse formData(@Context UriInfo uri, @PathParam("userId") Long userId, MultipartFormDataInput form) { Map params = new HashMap<>(); - uri.getQueryParameters().forEach((k, v) -> params.put(k, v.get(0))); + uri.getQueryParameters().forEach((k, v) -> params.put(k, v.getFirst())); form.getValues().forEach((k, v) -> params.put(k, v.stream().map(FormValue::getValue).findFirst().orElse(null))); return handle(userId, params); } diff --git a/commafeed-server/src/test/java/com/commafeed/backend/feed/FeedUtilsTest.java b/commafeed-server/src/test/java/com/commafeed/backend/feed/FeedUtilsTest.java index c06e11c0..3e31d9f0 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/feed/FeedUtilsTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/feed/FeedUtilsTest.java @@ -31,10 +31,10 @@ class FeedUtilsTest { Assertions.assertEquals("Test Entry", syndEntry.getTitle()); Assertions.assertEquals("Author Name", syndEntry.getAuthor()); Assertions.assertEquals(1, syndEntry.getContents().size()); - Assertions.assertEquals("This is a test entry content.", syndEntry.getContents().get(0).getValue()); + Assertions.assertEquals("This is a test entry content.", syndEntry.getContents().getFirst().getValue()); Assertions.assertEquals(1, syndEntry.getEnclosures().size()); - Assertions.assertEquals("http://example.com/enclosure.mp3", syndEntry.getEnclosures().get(0).getUrl()); - Assertions.assertEquals("audio/mpeg", syndEntry.getEnclosures().get(0).getType()); + Assertions.assertEquals("http://example.com/enclosure.mp3", syndEntry.getEnclosures().getFirst().getUrl()); + Assertions.assertEquals("audio/mpeg", syndEntry.getEnclosures().getFirst().getType()); Assertions.assertEquals("http://example.com/test-entry", syndEntry.getLink()); Assertions.assertEquals(Date.from(Instant.ofEpochSecond(1)), syndEntry.getPublishedDate()); } diff --git a/commafeed-server/src/test/java/com/commafeed/backend/service/UserServiceTest.java b/commafeed-server/src/test/java/com/commafeed/backend/service/UserServiceTest.java index 75e8b2f7..4841c33d 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/service/UserServiceTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/service/UserServiceTest.java @@ -188,7 +188,7 @@ class UserServiceTest { void apiLoginShouldReturnUserIfUserFoundFromApikeyLookupNotDisabled() { Mockito.when(userDAO.findByApiKey("apikey")).thenReturn(normalUser); Optional returnedUser = userService.login("apikey"); - Assertions.assertEquals(normalUser, returnedUser.get()); + Assertions.assertEquals(Optional.of(normalUser), returnedUser); } } diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/CategoryIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/CategoryIT.java index e881bd80..3ec99277 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/CategoryIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/CategoryIT.java @@ -58,9 +58,9 @@ class CategoryIT extends BaseIT { Category root = getRootCategory(); Assertions.assertEquals(2, root.getChildren().size()); - Assertions.assertEquals("test-category-1", root.getChildren().get(0).getName()); - Assertions.assertEquals(1, root.getChildren().get(0).getChildren().size()); - Assertions.assertEquals("modified-category-2", root.getChildren().get(0).getChildren().get(0).getName()); + Assertions.assertEquals("test-category-1", root.getChildren().getFirst().getName()); + Assertions.assertEquals(1, root.getChildren().getFirst().getChildren().size()); + Assertions.assertEquals("modified-category-2", root.getChildren().getFirst().getChildren().getFirst().getName()); request = new CategoryModificationRequest(); request.setId(Long.valueOf(category3Id)); @@ -79,7 +79,7 @@ class CategoryIT extends BaseIT { Category root = getRootCategory(); Assertions.assertEquals(1, root.getChildren().size()); - Assertions.assertTrue(root.getChildren().get(0).isExpanded()); + Assertions.assertTrue(root.getChildren().getFirst().isExpanded()); CollapseRequest request = new CollapseRequest(); request.setId(Long.valueOf(categoryId)); @@ -88,7 +88,7 @@ class CategoryIT extends BaseIT { root = getRootCategory(); Assertions.assertEquals(1, root.getChildren().size()); - Assertions.assertFalse(root.getChildren().get(0).isExpanded()); + Assertions.assertFalse(root.getChildren().getFirst().isExpanded()); } @Test @@ -178,7 +178,7 @@ class CategoryIT extends BaseIT { Long subscriptionId = subscribeAndWaitForEntries(getFeedUrl()); Assertions.assertEquals(0, getCategoryEntries(CategoryREST.STARRED).getEntries().size()); - Entry entry = getFeedEntries(subscriptionId).getEntries().get(0); + Entry entry = getFeedEntries(subscriptionId).getEntries().getFirst(); StarRequest starRequest = new StarRequest(); starRequest.setId(entry.getId()); @@ -188,7 +188,7 @@ class CategoryIT extends BaseIT { Entries starredEntries = getCategoryEntries(CategoryREST.STARRED); Assertions.assertEquals(1, starredEntries.getEntries().size()); - Assertions.assertEquals(entry.getId(), starredEntries.getEntries().get(0).getId()); + Assertions.assertEquals(entry.getId(), starredEntries.getEntries().getFirst().getId()); } @Test @@ -196,7 +196,7 @@ class CategoryIT extends BaseIT { Long subscriptionId = subscribeAndWaitForEntries(getFeedUrl()); Assertions.assertEquals(0, getTaggedEntries("my-tag").getEntries().size()); - Entry entry = getFeedEntries(subscriptionId).getEntries().get(0); + Entry entry = getFeedEntries(subscriptionId).getEntries().getFirst(); TagRequest tagRequest = new TagRequest(); tagRequest.setEntryId(Long.valueOf(entry.getId())); @@ -205,7 +205,7 @@ class CategoryIT extends BaseIT { Entries taggedEntries = getTaggedEntries("my-tag"); Assertions.assertEquals(1, taggedEntries.getEntries().size()); - Assertions.assertEquals(entry.getId(), taggedEntries.getEntries().get(0).getId()); + Assertions.assertEquals(entry.getId(), taggedEntries.getEntries().getFirst().getId()); } @Test diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java index 85baf445..ea13f7e9 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/FeverIT.java @@ -80,7 +80,7 @@ class FeverIT extends BaseIT { FeverResponse feverResponse = client.execute("items"); Assertions.assertEquals(2, feverResponse.getItems().size()); - FeverItem item = feverResponse.getItems().get(0); + FeverItem item = feverResponse.getItems().getFirst(); Assertions.assertEquals(subscriptionId, item.getFeedId()); Assertions.assertEquals("Item 2", item.getTitle()); Assertions.assertEquals("Item 2 description", item.getHtml()); @@ -92,7 +92,7 @@ class FeverIT extends BaseIT { @Test void entriesByIds() { Long subscriptionId = subscribeAndWaitForEntries(getFeedUrl()); - Entry entry = getFeedEntries(subscriptionId).getEntries().get(0); + Entry entry = getFeedEntries(subscriptionId).getEntries().getFirst(); FeverResponse feverResponse = client.execute("items", new Param("with_ids", entry.getId())); Assertions.assertEquals(1, feverResponse.getItems().size()); @@ -101,7 +101,7 @@ class FeverIT extends BaseIT { @Test void savedEntries() { Long subscriptionId = subscribeAndWaitForEntries(getFeedUrl()); - Entry entry = getFeedEntries(subscriptionId).getEntries().get(0); + Entry entry = getFeedEntries(subscriptionId).getEntries().getFirst(); StarRequest starRequest = new StarRequest(); starRequest.setId(entry.getId()); @@ -116,7 +116,7 @@ class FeverIT extends BaseIT { @Test void markEntry() { Long subscriptionId = subscribeAndWaitForEntries(getFeedUrl()); - Entry entry = getFeedEntries(subscriptionId).getEntries().get(0); + Entry entry = getFeedEntries(subscriptionId).getEntries().getFirst(); client.execute("_", new Param("mark", "item"), new Param("id", entry.getId()), new Param("as", "read")); Assertions.assertEquals(1, getFeedEntries(subscriptionId).getEntries().stream().filter(Entry::isRead).count()); @@ -147,7 +147,7 @@ class FeverIT extends BaseIT { @Test void tagEntry() { Long subscriptionId = subscribeAndWaitForEntries(getFeedUrl()); - Entry entry = getFeedEntries(subscriptionId).getEntries().get(0); + Entry entry = getFeedEntries(subscriptionId).getEntries().getFirst(); client.execute("_", new Param("mark", "item"), new Param("id", entry.getId()), new Param("as", "saved")); Assertions.assertEquals(1, getFeedEntries(subscriptionId).getEntries().stream().filter(Entry::isStarred).count()); @@ -161,7 +161,7 @@ class FeverIT extends BaseIT { createCategory("category-1"); FeverResponse feverResponse = client.execute("groups"); Assertions.assertEquals(1, feverResponse.getGroups().size()); - Assertions.assertEquals("category-1", feverResponse.getGroups().get(0).getTitle()); + Assertions.assertEquals("category-1", feverResponse.getGroups().getFirst().getTitle()); } @Test diff --git a/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java b/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java index fa3b9b53..59168d4c 100644 --- a/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java +++ b/commafeed-server/src/test/java/com/commafeed/integration/rest/UserIT.java @@ -48,12 +48,12 @@ class UserIT extends BaseIT { List mails = mailbox.getMailMessagesSentTo("admin@commafeed.com"); Assertions.assertEquals(1, mails.size()); - MailMessage message = mails.get(0); + MailMessage message = mails.getFirst(); Assertions.assertEquals("CommaFeed - Password recovery", message.getSubject()); Assertions.assertTrue(message.getHtml().startsWith("You asked for password recovery for account 'admin'")); - Assertions.assertEquals("admin@commafeed.com", message.getTo().get(0)); + Assertions.assertEquals("admin@commafeed.com", message.getTo().getFirst()); - Element a = Jsoup.parse(message.getHtml()).select("a").get(0); + Element a = Jsoup.parse(message.getHtml()).select("a").getFirst(); String link = a.attr("href"); String newPasswordResponse = RestAssured.given().urlEncodingEnabled(false).get(link).then().statusCode(200).extract().asString(); Assertions.assertTrue(newPasswordResponse.contains("Your new password is:")); diff --git a/pom.xml b/pom.xml index b9eab8c5..3e46ade5 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ UTF-8 - 17 + 25