Would it be possible to modify the code of AbstractReferenceMap.java as
follows?
diff --git
a/src/main/java/org/apache/commons/collections4/map/AbstractReferenceMap.java
b/src/main/java/org/apache/commons/collections4/map/AbstractReferenceMap.java
index 0eda632f..81f60b4b 100644
---
a/src/main/java/org/apache/commons/collections4/map/AbstractReferenceMap.java
+++
b/src/main/java/org/apache/commons/collections4/map/AbstractReferenceMap.java
@@ -400,13 +400,15 @@ public abstract class AbstractReferenceMap<K, V>
extends AbstractHashedMap<K, V>
HashEntry<K, V> previous = null;
HashEntry<K, V> entry = data[index];
while (entry != null) {
- if (((ReferenceEntry<K, V>) entry).purge(ref)) {
+ ReferenceEntry<K, V> refEntry = (ReferenceEntry<K, V>) entry;
+ if (refEntry.purge(ref)) {
if (previous == null) {
data[index] = entry.next;
} else {
previous.next = entry.next;
}
this.size--;
+ refEntry.onPurge();
return;
}
previous = entry;
@@ -721,12 +723,15 @@ public abstract class AbstractReferenceMap<K, V>
extends AbstractHashedMap<K, V>
throw new Error();
}
+ protected void onPurge() {
+ }
+
/**
* Purges the specified reference
* @param ref the reference to purge
* @return true or false
*/
- boolean purge(final Reference<?> ref) {
+ protected boolean purge(final Reference<?> ref) {
boolean r = parent.keyType != ReferenceStrength.HARD && key ==
ref;
r = r || parent.valueType != ReferenceStrength.HARD && value
== ref;
if (r) {
@@ -1073,4 +1078,17 @@ public abstract class AbstractReferenceMap<K, V>
extends AbstractHashedMap<K, V>
protected boolean isKeyType(final ReferenceStrength type) {
return this.keyType == type;
}
+
+ /**
+ * Provided protected read-only access to the value type.
+ * @param type the type to check against.
+ * @return true if valueType has the specified type
+ */
+ protected boolean isValueType(final ReferenceStrength type) {
+ return this.valueType == type;
+ }
+
+ public boolean isPurgeValues() {
+ return purgeValues;
+ }
}
Post by Maxim SolodovnikThanks a lot for the answer,
OpenJPA ReferenceHashMap overrides purge method to be able to call
custom methods keyExpired/valueExpired [1]
I see no way to migrate this code without massive copy/paste or reflection ...
Maybe you can suggest something?
Or maybe commons-collections API can be enhanced so this task will be trivial :)
https://github.com/apache/openjpa/blob/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/ReferenceHashMap.java#L138
On Mon, 3 Sep 2018 at 20:03, Julio Oliveira
Post by Julio OliveiraWhat is realy your problem??..
Post by Maxim SolodovnikHello,
I'm trying to migrate code of Apache OpenJPA from commons-collections
to commons-collections4
The only real issue so far with migrating this class
https://github.com/apache/openjpa/blob/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/ReferenceHashMap.java#L112
Post by Julio OliveiraPost by Maxim Solodovnikcode of commons-collections4 is more restrictive could you please
suggest how custom purge can be implemented?
--
WBR
Maxim aka solomax
---------------------------------------------------------------------
--
WBR
Maxim aka solomax
--
WBR
Maxim aka solomax