From a2c24a174db8b67fa2ef39a06297779adabefb93 Mon Sep 17 00:00:00 2001 From: John DeRegnaucourt Date: Sat, 6 Apr 2024 13:30:50 -0400 Subject: [PATCH] Updated to use IdentityHashMap for cycle detection for improved performance. --- .../com/cedarsoftware/util/ClassUtilities.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/cedarsoftware/util/ClassUtilities.java b/src/main/java/com/cedarsoftware/util/ClassUtilities.java index e27cc4c3..3be94c9e 100644 --- a/src/main/java/com/cedarsoftware/util/ClassUtilities.java +++ b/src/main/java/com/cedarsoftware/util/ClassUtilities.java @@ -8,6 +8,7 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.IdentityHashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; @@ -75,7 +76,6 @@ public class ClassUtilities primitiveToWrapper.put(byte.class, Byte.class); primitiveToWrapper.put(short.class, Short.class); primitiveToWrapper.put(void.class, Void.class); - } /** @@ -112,9 +112,9 @@ public static int computeInheritanceDistance(Class source, Class destinati } Queue> queue = new LinkedList<>(); - Set> visited = new HashSet<>(); + Map, String> visited = new IdentityHashMap<>(); queue.add(source); - visited.add(source); + visited.put(source, null); int distance = 0; @@ -130,9 +130,9 @@ public static int computeInheritanceDistance(Class source, Class destinati if (current.getSuperclass().equals(destination)) { return distance; } - if (!visited.contains(current.getSuperclass())) { + if (!visited.containsKey(current.getSuperclass())) { queue.add(current.getSuperclass()); - visited.add(current.getSuperclass()); + visited.put(current.getSuperclass(), null); } } @@ -141,9 +141,9 @@ public static int computeInheritanceDistance(Class source, Class destinati if (interfaceClass.equals(destination)) { return distance; } - if (!visited.contains(interfaceClass)) { + if (!visited.containsKey(interfaceClass)) { queue.add(interfaceClass); - visited.add(interfaceClass); + visited.put(interfaceClass, null); } } }