aboutsummaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorAndy Clement <aclement@pivotal.io>2016-07-29 10:05:50 -0700
committerAndy Clement <aclement@pivotal.io>2016-07-29 10:05:50 -0700
commit87856659869b9dbf72e1b329986fb2d727cfad18 (patch)
treebe703a38baedd823689b7279e7641c19abb2dee6 /util
parent784906d2ee0cb1b432a9aff6973c12cfd865db6e (diff)
downloadaspectj-87856659869b9dbf72e1b329986fb2d727cfad18.tar.gz
aspectj-87856659869b9dbf72e1b329986fb2d727cfad18.zip
Fix ambiguous binding problem on anonymous types
If an anonymous class calls a method ITD'd onto one of its own supertypes (e.g. new A() { xx(null); }) then it can be reported as an ambiguous method invocation on Java8. There is different handling for Java8 that is revealing an issue. The intertype method declarations are recorded in a member finder attached to the target type (A in this case). When the local type binding is built it gets all the methods from supertypes added to it - this unfortunately includes the ITD method. Then later when something asks for all 'xx' methods on A, it finds the ITD method from when A was constructed and an additional copy from the member finder. The quick fix is for the member finder to use a set rather than list when answering 'what are the xx methods'. If this proves a problem down the line the deeper fix would be to avoid including ITDs when the local type binding is built.
Diffstat (limited to 'util')
0 files changed, 0 insertions, 0 deletions