Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f925689

Browse files
author
Gabor Nagy
committed
Caching of typeStrategyMap resolution results (preformance patch)
1 parent 922632f commit f925689

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

‎src/main/java/de/danielbechler/diff/identity/IdentityService.java‎

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class IdentityService
3838
private final NodePathValueHolder<IdentityStrategy> nodePathStrategies = NodePathValueHolder
3939
.of(IdentityStrategy.class);
4040
private final Map<Class<?>, IdentityStrategy> typeStrategyMap = new HashMap<Class<?>, IdentityStrategy>();
41+
private final Map<Class<?>, IdentityStrategy> typeStrategyMapCache = new HashMap<Class<?>, IdentityStrategy>();
4142
private final TypePropertyResolver typePropertyResolver = new TypePropertyResolver();
4243
private final ObjectDifferBuilder objectDifferBuilder;
4344

@@ -67,15 +68,29 @@ public IdentityStrategy resolveIdentityStrategy(final DiffNode node) {
6768
* Resolves by type including subclasses / interfaces.
6869
*
6970
* @param aClass
70-
* @return
71+
* @return never null, EQUALS_IDENTITY_STRATEGY if not found
7172
*/
7273
private IdentityStrategy resolveTypeStrategy(final Class<?> aClass) {
73-
for (Class<?> keyClass : typeStrategyMap.keySet()) {
74-
if (keyClass.isAssignableFrom(aClass)) {
75-
return typeStrategyMap.get(keyClass);
74+
// check cache
75+
IdentityStrategy ret = typeStrategyMapCache.get(aClass);
76+
77+
if(ret == null) {
78+
// not in cache, search
79+
for (Class<?> keyClass : typeStrategyMap.keySet()) {
80+
if (keyClass.isAssignableFrom(aClass)) {
81+
ret = typeStrategyMap.get(keyClass);
82+
typeStrategyMapCache.put(aClass, ret);
83+
return ret;
84+
}
7685
}
86+
// not found, use EQUALS_IDENTITY_STRATEGY
87+
ret = EQUALS_IDENTITY_STRATEGY;
88+
typeStrategyMapCache.put(aClass, ret);
89+
return ret;
90+
} else {
91+
// in cache, return
92+
return ret;
7793
}
78-
return null;
7994
}
8095

8196
public IdentityStrategy resolveByCollectionElement(

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /