RFR: JDK-8209055: c.s.t.javac.code.DeferredCompletionFailureHandler seems to use WeakHashMap incorrectly

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed Nov 7 21:34:39 UTC 2018


Jan,

You don't need to @build JavacTestingAbstractProcessor, since it is not 
used.

Otherwise OK.

-- Jon


On 10/31/18 7:59 AM, Jan Lahoda wrote:
> Hi,
>
> After JDK-8187950, when a Symbol is completed in "user"/external mode 
> (as opposed to "javac internal" mode), and the completion fails, the 
> failed Symbol is "split", so that the user's code and javac may see a 
> different version of the Symbol (e.g. completed/not completed). This 
> helps to prevent throwing CompletionFailures to user's code.
>
> But the issue is that ClassFinder.loadClass may create "speculative" 
> ClassSymbols, which are subsequently removed if they turn out to be 
> non-existent. But when this happens in the "user" mode (like inside 
> Elements.getTypeElement), even these non-existent ClassSymbols are 
> still retained, and the number of ClassSymbols retained this way may 
> be fairly high. The proposed patch is to clear these speculative 
> Symbols even from the "user" mode cache.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8209055
> Webrev: http://cr.openjdk.java.net/~jlahoda/8209055/webrev.00/
>
> Any feedback is welcome.
>
> Thanks,
>     Jan



More information about the compiler-dev mailing list