Improve BindingClassLoader.toString() and equality 09/112809/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 1 Aug 2024 22:23:20 +0000 (00:23 +0200)
committerRobert Varga <nite@hq.sk>
Fri, 2 Aug 2024 08:18:36 +0000 (08:18 +0000)
Improve BindingClassLoader.toString(), so that we:
- retain identity information, but use a consistent HexFormat string
- expose parent ClassLoader
- expose target from LeafBindingClassLoader

Also codify that a BindingClassLoader operates on object identity, so
there is no confusion about that fact, ever.

Change-Id: I1c9f968ff1e1bf4b4fc5b2a4a5dc64544f7ecfed
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 2d59036ee09b33195ac01a24913393bc1e541eb8)

binding/mdsal-binding-loader/src/main/java/org/opendaylight/mdsal/binding/loader/BindingClassLoader.java
binding/mdsal-binding-loader/src/main/java/org/opendaylight/mdsal/binding/loader/LeafBindingClassLoader.java

index 2a75829d5d070a2a5a56953620037ed6c1c620e2..28fc05c0377f7aa74da87ee59311f605838b5070 100644 (file)
@@ -11,6 +11,8 @@ import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Verify.verify;
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import java.io.File;
@@ -19,6 +21,7 @@ import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.HexFormat;
 import java.util.Set;
 import java.util.function.Supplier;
 import net.bytebuddy.dynamic.DynamicType.Unloaded;
@@ -168,6 +171,25 @@ public abstract sealed class BindingClassLoader extends ClassLoader
         return ret;
     }
 
+    @Override
+    public final int hashCode() {
+        return super.hashCode();
+    }
+
+    @Override
+    public final boolean equals(final Object obj) {
+        return super.equals(obj);
+    }
+
+    @Override
+    public final String toString() {
+        return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();
+    }
+
+    ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+        return helper.add("identity", HexFormat.of().toHexDigits(hashCode())).add("parent", getParent());
+    }
+
     /**
      * Append specified loaders to this class loader for the purposes of looking up generated classes. Note that the
      * loaders are expected to have required classes already loaded. This is required to support generation of
index 856eab0726f6e07fb9cd504a580791f9841ae8b4..2c1c50fbc5738ccf192bef91192ac173685b5660 100644 (file)
@@ -10,6 +10,7 @@ package org.opendaylight.mdsal.binding.loader;
 import static com.google.common.base.Verify.verify;
 import static java.util.Objects.requireNonNull;
 
+import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.collect.ImmutableSet;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.VarHandle;
@@ -98,4 +99,9 @@ final class LeafBindingClassLoader extends BindingClassLoader {
             local = witness;
         }
     }
+
+    @Override
+    ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+        return super.addToStringAttributes(helper).add("target", target);
+    }
 }