From 04de1f36e4e817dc76e1c8a00da378879519c3e4 Mon Sep 17 00:00:00 2001 From: Pascal Christoph Date: Mon, 10 Feb 2025 10:33:51 +0100 Subject: [PATCH 1/2] Fix memory leak (#666) Let maps implement Closeable. --- .../metamorph/api/helpers/AbstractReadOnlyMap.java | 3 ++- .../main/java/org/metafacture/metamorph/maps/FileMap.java | 5 +++++ .../main/java/org/metafacture/metamorph/maps/RestMap.java | 4 ++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/metamorph-api/src/main/java/org/metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java b/metamorph-api/src/main/java/org/metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java index a43ce5054..f579e16be 100644 --- a/metamorph-api/src/main/java/org/metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java +++ b/metamorph-api/src/main/java/org/metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java @@ -16,6 +16,7 @@ package org.metafacture.metamorph.api.helpers; +import java.io.Closeable; import java.util.Collection; import java.util.Map; import java.util.Set; @@ -29,7 +30,7 @@ * @param type of values * @author Markus Michael Geipel */ -public abstract class AbstractReadOnlyMap implements Map { +public abstract class AbstractReadOnlyMap implements Map, Closeable { @Override public final int size() { diff --git a/metamorph/src/main/java/org/metafacture/metamorph/maps/FileMap.java b/metamorph/src/main/java/org/metafacture/metamorph/maps/FileMap.java index 8462007ee..26d6c716e 100644 --- a/metamorph/src/main/java/org/metafacture/metamorph/maps/FileMap.java +++ b/metamorph/src/main/java/org/metafacture/metamorph/maps/FileMap.java @@ -290,4 +290,9 @@ public Set keySet() { return Collections.unmodifiableSet(map.keySet()); } + @Override + public void close() throws IOException { + map.clear(); + fileOpener.closeStream(); + } } diff --git a/metamorph/src/main/java/org/metafacture/metamorph/maps/RestMap.java b/metamorph/src/main/java/org/metafacture/metamorph/maps/RestMap.java index 1a1921947..64692ab10 100644 --- a/metamorph/src/main/java/org/metafacture/metamorph/maps/RestMap.java +++ b/metamorph/src/main/java/org/metafacture/metamorph/maps/RestMap.java @@ -107,4 +107,8 @@ public void setCharsetName(final String name) { charsetName = name; } + @Override + public void close() throws IOException { + + } } From d7858f6169b269161aa094fe390fd0d55a7816a4 Mon Sep 17 00:00:00 2001 From: Pascal Christoph Date: Fri, 14 Feb 2025 16:57:48 +0100 Subject: [PATCH 2/2] WIP use Autocloseable in maps Compiles with an error: AbstractReadOnlyMap.java:32: warning: [try] auto-closeable resource AbstractReadOnlyMap has a member method close() that could throw InterruptedException public abstract class AbstractReadOnlyMap implements Map, AutoCloseable { ^ where K,V are type-variables: K extends Object declared in class AbstractReadOnlyMap V extends Object declared in class AbstractReadOnlyMap " --- .../metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/metamorph-api/src/main/java/org/metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java b/metamorph-api/src/main/java/org/metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java index f579e16be..e3b1ff5d3 100644 --- a/metamorph-api/src/main/java/org/metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java +++ b/metamorph-api/src/main/java/org/metafacture/metamorph/api/helpers/AbstractReadOnlyMap.java @@ -16,7 +16,6 @@ package org.metafacture.metamorph.api.helpers; -import java.io.Closeable; import java.util.Collection; import java.util.Map; import java.util.Set; @@ -30,7 +29,7 @@ * @param type of values * @author Markus Michael Geipel */ -public abstract class AbstractReadOnlyMap implements Map, Closeable { +public abstract class AbstractReadOnlyMap implements Map, AutoCloseable { @Override public final int size() {