<a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6679509">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6679509</a><br><br>
Summary: An AssertionError is thrown while analyzing valid program. The exception occurs when a foreach loop like:<br>for (java.util.List&lt;?&gt; t : l) {<br>}<br>is used in a finally block, and target is 1.5.<br><br>The problem&#39;s root cause is, IMO, that Gen is processing a tree with generics (the generics should be stripped from the trees in TransTypes, if I understand everything correctly).<br>
<br>In this case, the code above gets correctly TransType-d to:<br>for (java.util.List t : l) {<br>}<br><br>Then, during Lower, the foreach loop is expanded into an ordinary Iterator-based loop:<br>for (java.util.Iterator i$ = l.iterator(); i$.hasNext(); ) {<br>
&nbsp;&nbsp;&nbsp; List&lt;?&gt; t = (List)i$.next();<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; }<br>}<br><br>which contains the tree with generics.<br><br>This is side-effect of using TreeMaker.VarDef(VarSymbol v, JCExpression init), which uses v.type (which contains generics) to construct the tree for the variable&#39;s type.<br>
<br>I have prepared a patch that constructs the tree for the variable using erasure(v.type). The patch is attached.<br><br>Any opinions on the patch?<br><br>Thanks,<br>&nbsp;&nbsp; Jan<br>&nbsp;&nbsp; <br>