Hi Claes,

That's ok. You could also add @see tag to WeakEntry.equals pointing to MethodType.equals. The other way around is not possible, but you could spell-out the same: "See also WeakEntry.equals()"

Regards, Peter

On 08/20/2018 12:56 PM, Claes Redestad wrote:

Yes, perhaps just pointers from the two equals() methods to each other, explaining that they are actually one method which is split into two unrelated classes.

It'd be worth to document this as javadoc of these two equals methods
(that's probably what you are thinking).

While this could be an @implNote in the javadoc, I think as this is an internal implementation detail with a private type (WeakEntry) (that doesn't leak) we are better off just adding this as a code comment on MethodType#equals:

diff -r a34087e2b440 src/java.base/share/classes/java/lang/invoke/MethodType.java --- a/src/java.base/share/classes/java/lang/invoke/MethodType.java Mon Aug 20 12:30:38 2018 +0200 +++ b/src/java.base/share/classes/java/lang/invoke/MethodType.java Mon Aug 20 12:46:20 2018 +0200
@@ -786,6 +786,9 @@
      * @param x object to compare
      * @see Object#equals(Object)
      */
+    // This implementation may also return true if x is a WeakEntry containing +    // a method type that is equal to this. This is an internal implementation
+    // detail to allow for faster method type lookups.
     @Override
     public boolean equals(Object x) {
         if (this == x) {
@@ -1350,6 +1353,12 @@
                 hashcode = key.hashCode();
             }

+            /**
+             * This implementation returns true both if {@code obj} is another +             * {@code WeakEntry} whose referent is equals to this referent, but also +             * if {@code obj} is equals to the referent directly. This allows +             * lookups to be made without wrapping in a {@code WeakEntry}.
+             */
             @Override
             public boolean equals(Object obj) {
                 Object mine = get();

/Claes

Reply via email to