aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit/src/org
diff options
context:
space:
mode:
authorThomas Wolf <thomas.wolf@paranor.ch>2020-12-30 17:17:44 +0100
committerMatthias Sohn <matthias.sohn@sap.com>2021-01-01 12:49:05 -0500
commit0f442d70836ee292ed916605448f806cc7d1fe78 (patch)
tree385934b067f392c40b645d46ecc94101815b53ac /org.eclipse.jgit/src/org
parent5b1a6e0e382da62e8678afdb2524109efb38eeb4 (diff)
downloadjgit-0f442d70836ee292ed916605448f806cc7d1fe78.tar.gz
jgit-0f442d70836ee292ed916605448f806cc7d1fe78.zip
Use Map interface instead of ConcurrentHashMap class
On Android, the co-variant override of ConcurrentHashMap.keySet() introduced in Java 8 was undone. [1] If compiled Java code calls that co-variant override directly, one gets a NoSuchMethodError exception at run-time on Android. Making the code call that method via Map.keySet() side-steps this problem. This is similar to bug 496262, where the same problem cropped up when compiling with Java 8 against a Java 7 target, but here we cannot use bootclasspath. We build against Java 8, not against the Android version of it. Recent Android versions should have some bytecode "magic" that adds the co-variant override in bytecode (see the commit referenced in [1]), but on older Android version this problem may still occur. (Or perhaps the "magic" is ineffective...) There are two pull requests on Github for this problem, both from 2020, [2][3] while the Android commit [1] is from March 2018. Apparently people still occasionally run into this problem in the wild. [1] https://android.googlesource.com/platform/libcore/+/0e8b937ded4de39f1d1cea5f04800d67dd2ec570/ojluni/src/main/java/java/util/concurrent/ConcurrentHashMap.java#1244 [2] https://github.com/eclipse/jgit/pull/104 [3] https://github.com/eclipse/jgit/pull/100 Change-Id: I7c07e0cc59871cb7fe60795e22867827fa9c2458 Signed-off-by: Thomas Wolf <thomas.wolf@paranor.ch>
Diffstat (limited to 'org.eclipse.jgit/src/org')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java5
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/attributes/FilterCommandRegistry.java3
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/events/ListenerList.java4
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java3
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java4
5 files changed, 11 insertions, 8 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java
index 2c01c19c59..fdf8b80cd4 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/ArchiveCommand.java
@@ -19,7 +19,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.JGitInternalException;
@@ -202,7 +201,7 @@ public class ArchiveCommand extends GitCommand<OutputStream> {
* Available archival formats (corresponding to values for
* the --format= option)
*/
- private static final ConcurrentMap<String, FormatEntry> formats =
+ private static final Map<String, FormatEntry> formats =
new ConcurrentHashMap<>();
/**
@@ -215,7 +214,7 @@ public class ArchiveCommand extends GitCommand<OutputStream> {
* @param newValue value to be associated with the key (null to remove).
* @return true if the value was replaced
*/
- private static <K, V> boolean replace(ConcurrentMap<K, V> map,
+ private static <K, V> boolean replace(Map<K, V> map,
K key, V oldValue, V newValue) {
if (oldValue == null && newValue == null) // Nothing to do.
return true;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/attributes/FilterCommandRegistry.java b/org.eclipse.jgit/src/org/eclipse/jgit/attributes/FilterCommandRegistry.java
index 2698e23035..1c9e9d7f71 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/attributes/FilterCommandRegistry.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/attributes/FilterCommandRegistry.java
@@ -12,6 +12,7 @@ package org.eclipse.jgit.attributes;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@@ -23,7 +24,7 @@ import org.eclipse.jgit.lib.Repository;
* @since 4.6
*/
public class FilterCommandRegistry {
- private static ConcurrentHashMap<String, FilterCommandFactory> filterCommandRegistry = new ConcurrentHashMap<>();
+ private static Map<String, FilterCommandFactory> filterCommandRegistry = new ConcurrentHashMap<>();
/**
* Register a {@link org.eclipse.jgit.attributes.FilterCommandFactory}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/events/ListenerList.java b/org.eclipse.jgit/src/org/eclipse/jgit/events/ListenerList.java
index 32c3a1d28f..476c37c1c3 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/events/ListenerList.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/events/ListenerList.java
@@ -11,15 +11,15 @@
package org.eclipse.jgit.events;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* Manages a thread-safe list of {@link org.eclipse.jgit.events.RepositoryListener}s.
*/
public class ListenerList {
- private final ConcurrentMap<Class<? extends RepositoryListener>, CopyOnWriteArrayList<ListenerHandle>> lists = new ConcurrentHashMap<>();
+ private final Map<Class<? extends RepositoryListener>, CopyOnWriteArrayList<ListenerHandle>> lists = new ConcurrentHashMap<>();
/**
* Register a {@link org.eclipse.jgit.events.WorkingTreeModifiedListener}.
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java
index 2c108de86f..c1beb6f417 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/RepositoryCache.java
@@ -14,6 +14,7 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
@@ -193,7 +194,7 @@ public class RepositoryCache {
cache.configureEviction(repositoryCacheConfig);
}
- private final ConcurrentHashMap<Key, Repository> cacheMap;
+ private final Map<Key, Repository> cacheMap;
private final Lock[] openLocks;
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java b/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java
index d7dd3bee52..881873de6f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/nls/NLS.java
@@ -11,6 +11,7 @@
package org.eclipse.jgit.nls;
import java.util.Locale;
+import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.eclipse.jgit.errors.TranslationBundleLoadingException;
@@ -110,7 +111,8 @@ public class NLS {
}
private final Locale locale;
- private final ConcurrentHashMap<Class, TranslationBundle> map = new ConcurrentHashMap<>();
+
+ private final Map<Class, TranslationBundle> map = new ConcurrentHashMap<>();
private NLS(Locale locale) {
this.locale = locale;