]> source.dussan.org Git - aspectj.git/commitdiff
Added commentary on a strange bit of code
authorAndy Clement <aclement@pivotal.io>
Wed, 27 Sep 2017 21:15:38 +0000 (14:15 -0700)
committerAndy Clement <aclement@pivotal.io>
Wed, 27 Sep 2017 21:15:38 +0000 (14:15 -0700)
I don't want to change that code until I see more evidence of it
misbehaving but I'm having trouble working out why it is there!

org.aspectj.matcher/src/org/aspectj/weaver/ReferenceType.java

index 65fdf3a95da9af12d723cfefc2a75273b915f067..7dc162a16950a5357fcd676070ec0a3234f26477 100644 (file)
@@ -376,10 +376,16 @@ public class ReferenceType extends ResolvedType {
                if (this.isFinal() || other.isFinal()) {
                        return false;
                }
+               
+               // 20170927: What is the block of code for? It mentions jls5.5 which isn't on this topic (old version of jls?)
+               // Some possible references: http://docs.oracle.com/javase/specs/jls/se9/jls9.pdf  5.1.6 (narrowing reference conversion)
+               // On Java 9 the test GenericsTests.testAfterReturningWithWildcardVar will fail because this code below
+               // used to find Set and List were the same, but now finds they are not. (so it doesn't put out the unchecked
+               // conversion message). However the code "List l = (List)someSet;" still compiles on 9 - so is this code bogus?
+               
                // ??? needs to be Methods, not just declared methods? JLS 5.5 unclear
                ResolvedMember[] a = getDeclaredMethods();
-               ResolvedMember[] b = other.getDeclaredMethods(); // ??? is this cast
-               // always safe
+               ResolvedMember[] b = other.getDeclaredMethods();
                for (int ai = 0, alen = a.length; ai < alen; ai++) {
                        for (int bi = 0, blen = b.length; bi < blen; bi++) {
                                if (!b[bi].isCompatibleWith(a[ai])) {