<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>A Concurrent Affair &#187; Search Results  &#187;  lapt-javac</title>
	<atom:link href="http://www.concurrentaffair.org/search/lapt-javac/feed/rss2/" rel="self" type="application/rss+xml" />
	<link>http://www.concurrentaffair.org</link>
	<description>a blog about Mathias&#039; work and play.</description>
	<lastBuildDate>Tue, 07 Feb 2012 07:11:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>JSR 308 Animosity</title>
		<link>http://www.concurrentaffair.org/2008/05/14/jsr-308-animosity/</link>
		<comments>http://www.concurrentaffair.org/2008/05/14/jsr-308-animosity/#comments</comments>
		<pubDate>Wed, 14 May 2008 07:47:04 +0000</pubDate>
		<dc:creator>Mathias</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[xajavac]]></category>

		<guid isPermaLink="false">http://www.concurrentaffair.org/?p=526</guid>
		<description><![CDATA[I've come across two blog posts that leave me p... <a href="http://www.concurrentaffair.org/2008/05/14/jsr-308-animosity/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve come across two blog posts that leave me perplexed: First there was <a href="http://www.michaelnygard.com/blog/2008/05/when_should_you_jump_jsr_308_t.html">&#8220;When Should You Jump? JSR 308. That&#8217;s When.&#8221;</a>, and now I just found <a href="http://bc-squared.blogspot.com/2008/05/what-hath-java-wrought.html">&#8220;What Hath Java Wrought&#8221;</a>.</p>

<p>I don&#8217;t know anything about the authors and I have only read the two posts, but statements like &#8220;Every language has a complexity budget. Java blew through it with generics in Java 5.&#8221; and &#8220;First we got Generics. We all know how that went. While it&#8217;s passably better than what was originally there, it&#8217;s still not worth a damn.&#8221; make me furrow my brow. As for generics, I gladly trade in the more complicated syntax for better static typing. Annotation processors can do the same for non-null values, mutability, problems with equality and identity. They can bring linear types into the language, and make pretty much every kind of program analysis I can think of easier.</p>

<p>I don&#8217;t understand why there is such much animosity towards JSR 308. It is much less intrusive than generics were; unless you plan to use raw types, the updated collections libraries virtually forced you to adopt generics to a certain degree. That&#8217;s not the case at all with annotations. If you like you can easily ignore the entire idea.</p>

<p>Now, perhaps I&#8217;m just not a good programmer, and that&#8217;s why I prefer to ride with training wheels like generics, more precise type systems and better warnings, but this kind of humility has never hurt me so far. It does not make sense to be so frugal on the syntax side; the semantic benefits by far outweigh the costs.</p>

<p>I&#8217;m definitely not a fan of how generics were implemented using erasure, and I believe there are shortcomings both in the annotations provided with Java 1.5 and JSR-308 (see <a href="http://www.cs.rice.edu/~mgricken/research/laptjavac/">LAPT-javac</a>, <a href="http://www.cs.rice.edu/~mgricken/research/xajavac/index.shtml">xajavac</a> and <a href="http://www.concurrentaffair.org/?s=lapt-javac">blog posts</a>), but I&#8217;m a firm believer that programmers have benefited a lot from generics, and that they will benefit in a similar way from annotations.</p>

<p>The beautiful thing about annotations is that dealing with them works on two different difficulty levels: Implementing annotations is not perfectly straight-forward, they use a syntax that is a bit different than the one used for regular Java classes, and that can be a bit confusing. Using annotations that have already been implemented, however, is easy; it&#8217;s an absolute piece of cake. This means that the annotations framework, especially with the annotation processors in JSR 308, can be used by more seasoned programmers to provide a lot of value even to programmers who do not know all of the details.</p>

<p>As a programming language researcher, I&#8217;m excited about annotations because they allow me to extend and modify the Java language in a relatively safe, convenient and compatible way. The resulting experimental languages may not be the most elegant ones, but they do the trick. Considering the two different levels of difficulty, and the possibility to completely ignore annotations, I have no idea why programmers would dislike annotations so much that they would abandon a language that can still be used exactly the same as without annotations.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.concurrentaffair.org/2008/05/14/jsr-308-animosity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>About</title>
		<link>http://www.concurrentaffair.org/about/</link>
		<comments>http://www.concurrentaffair.org/about/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 23:19:07 +0000</pubDate>
		<dc:creator>Mathias</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.superscalar.org/blog/index.php/about/</guid>
		<description><![CDATA[This blog is about my work and play. Mostly work, but fortunately my work quite often feels like playing. I&#8217;m Mathias Ricken and a recent PhD graduate from the Programming Languages Team at Rice University. I&#8217;m also one of the &#8230; <a href="http://www.concurrentaffair.org/about/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This blog is about my work and play. Mostly work, but fortunately my work quite often feels like playing. I&#8217;m <a href="http://www.cs.rice.edu/~mgricken/">Mathias Ricken</a> and a recent <a href="http://www.cs.rice.edu/~mgricken/">PhD graduate</a> from the <a href="http://www.cs.rice.edu/~javaplt/">Programming Languages Team</a> at <a href="http://www.rice.edu">Rice University</a>. I&#8217;m also one of the principal developers of the <a href="http://drjava.org">DrJava</a> integrated development environment, and I used to be <a href="http://www.cs.rice.edu/~mgricken/teaching/">instructor</a> in the <a href="http://www.compsci.rice.edu">Computer Science</a> department at Rice. I&#8217;m mainly interested in programming languages, concurrent programming, object-oriented programming and computer science education.</p>

<p><a href="http://www.concurrentaffair.org/wp-content/uploads/2010/07/TWISI–Mathias-Ricken–credit-FITLOW_800.jpg"><img src="http://www.concurrentaffair.org/wp-content/uploads/2010/07/TWISI–Mathias-Ricken–credit-FITLOW_800-300x199.jpg" alt="Mathias Ricken is a Ph.D. candidate in computer science at Rice. (Photo by JEFF FITLOW)" title="TWISI–Mathias Ricken–credit FITLOW_800" width="300" height="199" class="size-medium wp-image-1969" /></a></p>

<p>My main project is about <a href="http://www.concutest.org">testing concurrent programs</a> (<a href="http://www.concurrentaffair.org/index.php/category/research/concurrent-unit-testing/">blog category</a>). Two of the goals are race detection and schedule-based replay for Java programs, in the specific context of unit testing. I have also created invariant checker that allows the programmer to make statements about the concurrent behavior that have to hold true. I&#8217;m in the process of <a href="http://community.concutest.org">annotating the Java API with those invariants</a>, but that&#8217;s a gargantuan effort. I&#8217;d love to get some help here.</p>

<p>Of course, my work has spawned some side projects as well. First, I really wanted Java annotations on local variables, something that is <em>legal</em> according to the Java grammar, but <em>not supported</em> by any of the current Java compilers and JVMs, so I did my first javac hack and created <a href="http://www.cs.rice.edu/~mgricken/research/laptjavac/index.shtml">LAPT-javac</a>. Allowing the invariant checker to perform Boolean operations of existing invariants was very cumbersome with the annotations defined in the Java standard, and the problems could all be solved very simply by allowing subtyping for annotations. I therefore created my second, much more important javac (and Java API) hack, <a href="http://www.cs.rice.edu/~mgricken/research/xajavac/index.shtml">xajavac</a> (<a href="http://www.concurrentaffair.org/index.php/category/research/xajavac/">blog category</a>), which greatly extends the capabilities of annotations. I&#8217;m currently lobbying for it to be included in some future version of Java or a JSR.</p>

<p>Recently, I have worked on <a href="http://www.cs.rice.edu/~mgricken/research/mint/index.shtml">Mint</a> (<a href="http://www.concurrentaffair.org/category/research/mint/">blog category</a>), a multi-stage extension of Java. Multi-stage programming (MSP) provides a safe way of generating code at run-time. In mostly-functional languages like MetaOCaml, this has been used to reduce the performance penalties of abstractions such as loops, recursion or interpretation. The main advantage of MSP compared to other techniques, such as string or LISP quotations, is that MSP guarantees type safety for the generated code statically, at the time the program is compiled.</p>

<p>I have also dabbled with some other limitations of Java, such as the lack of tail-call optimization and the very restrictive nature of <code class="codecolorer text mac-classic"><span class="text">final</span></code> variable initialization, but I haven&#8217;t had enough time. I&#8217;ve published a few papers on object-oriented design and CS education, and even started writing a textbook (<a href="http://www.concurrentaffair.org/index.php/category/research/oop-book/">blog category</a>), but again, there&#8217;s not enough time for me or for my co-authors.</p>

<p>During the last few years, I&#8217;ve also been quite involved in the development of <a href="http://www.drjava.org">DrJava</a> (<a href="http://www.concurrentaffair.org/index.php/category/drjava/">blog category</a>), a Java IDE specifically targeted at students. My work with DrJava is mostly &#8220;productive procrastination&#8221;, and I have introduced many &#8220;80%/20%&#8221; solutions: Features that work in most cases, but not all, but they greatly enhance the productivity. I believe DrJava has now become an IDE that can actually be used for large projects as well; in fact, we do all our DrJava development in DrJava. The enhancements are &#8220;80%/20%&#8221; and not &#8220;100% solutions because often we lack the infrastructure.</p>

<p>I&#8217;ve been a teaching assistant for many semesters, so there are some rants that go along with it. For the first time during the Fall 2008 and Spring 2009 semesters, I was an instructor and tought full courses on my own. I was thrilled, and I wrote a bit about this experience too (respecting confidentiality, of course). In the semesters since, I have supervised students doing independent studies in Computer Science. Then there&#8217;s also some fairly general stuff about grad school, of course. And there are some ramblings that are somewhat off-topic.</p>

<p>I hope you&#8217;ll enjoy reading my blog (although it serves mostly as a work diary for me). If you want to comment, please email me at <a href="mailto:mgricken%20rice%20edu">mgricken<img src="http://www.superscalar.org/pictures/blogat.gif" class="noborder" alt=" ">rice<img src="http://www.superscalar.org/pictures/blogdot.gif" class="noborder" alt=" ">edu</a>, and I will gladly set up an account for you.</p>

<p>I took the <a href="http://www.concurrentaffair.org/wp-content/uploads/2010/06/IMG_4071-cropped.jpg">header photo</a> in Finland, where my mother grew up as a child.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.concurrentaffair.org/about/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Referenced in JSR 308 Proposal</title>
		<link>http://www.concurrentaffair.org/2007/11/19/referenced-in-jsr-308-proposal/</link>
		<comments>http://www.concurrentaffair.org/2007/11/19/referenced-in-jsr-308-proposal/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 18:53:34 +0000</pubDate>
		<dc:creator>Mathias</dc:creator>
				<category><![CDATA[Ramblings]]></category>
		<category><![CDATA[xajavac]]></category>

		<guid isPermaLink="false">http://www.superscalar.org/blog/index.php/2007/11/19/referenced-in-jsr-308-proposal/</guid>
		<description><![CDATA[I just noticed that the Related Work section of... <a href="http://www.concurrentaffair.org/2007/11/19/referenced-in-jsr-308-proposal/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I just noticed that the <a href="http://groups.csail.mit.edu/pag/jsr308/java-annotation-design.html#sec:related-work">Related Work</a> section of the JSR 308 proposal references my <a href="http://www.cs.rice.edu/~mgricken/research/laptjavac">LAPT-javac</a> modification for local variable annotations.</p>

<p>At last! I was a little bit disappointed by the <a href="http://www.concurrentaffair.org/index.php/2006/10/11/comments-and-questions-about-lapt-javac/">original feedback</a> I received for LAPT-javac.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.concurrentaffair.org/2007/11/19/referenced-in-jsr-308-proposal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Added Formal Grammar Changes and API Description to xajavac Website</title>
		<link>http://www.concurrentaffair.org/2007/11/19/added-formal-grammar-changes-and-api-description-to-xajavac-website/</link>
		<comments>http://www.concurrentaffair.org/2007/11/19/added-formal-grammar-changes-and-api-description-to-xajavac-website/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 18:07:57 +0000</pubDate>
		<dc:creator>Mathias</dc:creator>
				<category><![CDATA[xajavac]]></category>

		<guid isPermaLink="false">http://www.superscalar.org/blog/index.php/2007/11/19/added-formal-grammar-changes-and-api-description-to-xajavac-website/</guid>
		<description><![CDATA[I finally finished modifying the Java grammar t... <a href="http://www.concurrentaffair.org/2007/11/19/added-formal-grammar-changes-and-api-description-to-xajavac-website/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I finally finished modifying the Java grammar to faithfully represent my changes that enable subtyping for annotations. I also added a description of the extended API I had to develop to allow reflection for annotations with subtyping. I have also decided to remove the treatment for local variable annotations, originally implemented in <a href="http://www.cs.rice.edu/~mgricken/research/laptjavac">LAPT-javac</a>, from <a href="http://www.cs.rice.edu/~mgricken/research/xajavac/">xajavac</a> now that the JSR 308 proposal provides a different format.</p>

<p>All of this information, along with the binaries for the modified compiler and the API, is available on the <a href="http://www.cs.rice.edu/~mgricken/research/xajavac/">xajavac website</a>.</p>

<p>Now I should write a more formal tech report about this, I should contact Michael Ernst of the <a href="http://groups.csail.mit.edu/pag/jsr308/">JSR 308: Annotations on Types</a> project, and I should modify the code I wrote to for my MS thesis to take advantage of annotations with subtyping.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.concurrentaffair.org/2007/11/19/added-formal-grammar-changes-and-api-description-to-xajavac-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSR 308 Proposal Available</title>
		<link>http://www.concurrentaffair.org/2007/11/13/jsr-308-proposal-available/</link>
		<comments>http://www.concurrentaffair.org/2007/11/13/jsr-308-proposal-available/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 23:39:07 +0000</pubDate>
		<dc:creator>Mathias</dc:creator>
				<category><![CDATA[xajavac]]></category>

		<guid isPermaLink="false">http://www.superscalar.org/blog/index.php/2007/11/13/jsr-308-proposal-available/</guid>
		<description><![CDATA[The proposal for JSR 308, &#34;Annotations on Java ... <a href="http://www.concurrentaffair.org/2007/11/13/jsr-308-proposal-available/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://groups.csail.mit.edu/pag/jsr308/">proposal for JSR 308, &#8220;Annotations on Java Types&#8221;</a>, is available now. I&#8217;ve read it diagonally once, and it looks pretty nice. They&#8217;re finally adding class and runtime retention for local variables, something my <a href="http://www.concurrentaffair.org/index.php/2006/10/08/hacking-javac/">LAPT-javac</a> already did in October 2006. xajavac also incorporates my own non-standard representation for local variable annotations. Now that a standard representation is emerging, I&#8217;ll either have to change my implementation to make it adhere to the JSR 308 proposal, or I&#8217;ll have to drop it. That&#8217;s not a surprise, though; when I wrote LAPT-javac, I fully expected that it would become obsolete soon.</p>

<p><a href="http://groups.csail.mit.edu/pag/jsr308/java-annotation-design.html#htoc33">Subtyping for annotations</a> is also mentioned, but to my delight only under &#8220;Out-of-scope issues&#8221;, a.k.a. suggestions. So at least in the near future, xajavac seems to be the only project to incorporate annotations with subtyping into Java.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.concurrentaffair.org/2007/11/13/jsr-308-proposal-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subtyping for Annotations</title>
		<link>http://www.concurrentaffair.org/2007/11/05/subtyping-for-annotations/</link>
		<comments>http://www.concurrentaffair.org/2007/11/05/subtyping-for-annotations/#comments</comments>
		<pubDate>Mon, 05 Nov 2007 22:06:55 +0000</pubDate>
		<dc:creator>Mathias</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[xajavac]]></category>

		<guid isPermaLink="false">http://www.superscalar.org/blog/index.php/2007/11/05/subtyping-for-annotations/</guid>
		<description><![CDATA[Last night, I managed to change the Java compil... <a href="http://www.concurrentaffair.org/2007/11/05/subtyping-for-annotations/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last night, I managed to change the Java compiler to parse and encode annotations with inheritance. I&#8217;ve complained about this shortcoming many times already: Even though subtyping (inheritance) is one of the core concepts in Java, and even though annotations are represented using (slightly enhanced) interfaces, which support inheritance, Java disallows inheritance for annotations. I never quite understood why.</p>

<p>I&#8217;ve now created a modified compiler, based on the <a href="http://www.cs.rice.edu/~mgricken/research/laptjavac/">LAPT-javac</a> compiler I wrote a while back. The new compiler is called xajavac, for &#8220;eXtended Annotation javac&#8221;, and supports annotations on local variables, like LAPT-javac, and subtyping for annotations.</p>

<p>Now I can write the following:</p>

<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@<span style="color: #000000; font-weight: bold;">interface</span> InvariantAnnotation <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
@<span style="color: #000000; font-weight: bold;">interface</span> OnlyThreadWithName <span style="color: #000000; font-weight: bold;">extends</span> InvariantAnnotation <span style="color: #009900;">&#123;</span><br />
&nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> value<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
@<span style="color: #000000; font-weight: bold;">interface</span> OnlyEventThread <span style="color: #000000; font-weight: bold;">extends</span> InvariantAnnotation <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
@<span style="color: #000000; font-weight: bold;">interface</span> Or <span style="color: #000000; font-weight: bold;">extends</span> InvariantAnnotation <span style="color: #009900;">&#123;</span><br />
&nbsp; InvariantAnnotation value<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
@Or<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>@OnlyThreadWithName<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;main&quot;</span><span style="color: #009900;">&#41;</span>,<br />
&nbsp; &nbsp; &nbsp;@OnlyEventThread<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #000066; font-weight: bold;">void</span> foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> ... <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>

<p>I&#8217;m now working on providing an API that supports access to these annotations at runtime.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.concurrentaffair.org/2007/11/05/subtyping-for-annotations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comments and Questions about LAPT-javac</title>
		<link>http://www.concurrentaffair.org/2006/10/11/comments-and-questions-about-lapt-javac/</link>
		<comments>http://www.concurrentaffair.org/2006/10/11/comments-and-questions-about-lapt-javac/#comments</comments>
		<pubDate>Wed, 11 Oct 2006 21:34:26 +0000</pubDate>
		<dc:creator>Mathias</dc:creator>
				<category><![CDATA[Concurrent Unit Testing]]></category>
		<category><![CDATA[xajavac]]></category>

		<guid isPermaLink="false">http://www.superscalar.org/blog/?p=200</guid>
		<description><![CDATA[When I posted my hacked version of javac, LAPT-... <a href="http://www.concurrentaffair.org/2006/10/11/comments-and-questions-about-lapt-javac/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>When I posted my hacked version of javac, <a href="http://www.cs.rice.edu/~mgricken/research/laptjavac/">LAPT-javac</a>, I was a little hesitant at first, because I expected my hack would receive quite a bit of attention and public scrutiny, and I was afraid I had unknowingly done something really wrong and it would make me look stupid in front of the whole world.</p>

<p>Well, while the latter may still happen, so far it seems like LAPT-javac and I have pretty much been ignored. There was one email with a question about how LAPT-javac relates to another project, Javari from MIT, and there was one <a href="http://lambda-the-ultimate.org/node/1764#comment-21475">comment</a> in my announcement thread on <a href="http://lambda-the-ultimate.org/">Lambda the Ultimate</a> about <a href="http://www.artima.com/forums/flat.jsp?forum=276&#038;thread=179769">pluggable annotations</a> in <a href="http://jcp.org/aboutJava/communityprocess/edr/jsr269/index.html">JSR 269</a>.</p>

<p>Here&#8217;s my <a href="http://lambda-the-ultimate.org/node/1764#comment-21483">reply</a> to the LtU comment:</p>

<blockquote>Hi!<br />
<br />
Thanks for your comment and for the pointer to JSR 269. I wasn&#8217;t aware of that one before, so I guess there&#8217;s yet another JSR that I need to track ;)<br />
<br />
I looked at the Early Draft, and it looks like it supports a slightly extended annotation syntax as compared to Java 5.0 and provides a vastly improved support infrastructure that pulls apt into the standard API and extends it.<br />
<br />
There are references to annotations on local variables, but I&#8217;m not exactly sure we can rely on that. After all, you can annotate local variables in Java 5.0, and the API provides the ElementType.LOCAL_VARIABLE enum value to control if an annotation can be applied to a local variable, yet the Java 5.0 compiler and apt completely ignore them.<br />
<br />
Another reader also asked if I was aware of the Javari project at MIT and if what they were doing was similar to what I am doing. I have looked at Javari, and even though it&#8217;s not even the primary focus of that exciting project, they specify an extended syntax for annotations that allows you to annotate pretty much anything in a Java program. So what they are doing is way more compli cated and extensive than what I did. I just made the Java 5.0 compiler work the way I thought it should work, given the Java 5.0 language.<br />
<br />
There was a very encouraging paragraph on the Javari website: Apparently, Sun has agreed to extend annotations (and hopefully the way they can be processed) in Java 7.0; until then, the Javari team will provide a modified javac that supports the 7.0 syntax.<br />
<br />
That&#8217;s great, for two reasons: At least by the time Java 7.0 comes around, my hack should be unnecessary. And with Java 7.0 (and the Javari modification before that), we&#8217;ll get extended annotations. However, Java 7.0 is still very far away, and at least from what I can tell, the Javari modification is not yet available.<br />
<br />
Until then, I&#8217;m hoping that my hack will be useful to someone (it is useful to me) and that maybe Sun will notice how easy it was to do, so perhaps it will get rolled into 6.0 already? I know those chances are slim, but one can dream&#8230; ;)<br />
<br />
Thanks again for your comments and question. If you have any other questions or comments, please let me know, either here or by sending me an email (contact information is on the project website).<br />
<br />
I&#8217;m looking forward to hearing from you, and I will keep everyone posted about improving (=hacking) the reflection API and apt.</blockquote>

<p>I guess two other JSRs that I should keep on my watch list are <a href="http://jcp.org/aboutJava/communityprocess/pfd/jsr202/index.html">JSR 202: JavaTM Class File Specification Update</a> and <a href="http://www.jcp.org/en/jsr/detail?id=305">JSR 305</a> (see Java Community News <a href="http://www.artima.com/forums/flat.jsp?forum=276&#038;thread=174582">article</a>). Especially JSR 305, lead by <a href="http://www.cs.umd.edu/~pugh/">Bill Pugh</a> of the <a href="http://findbugs.sourceforge.net/">FindBugs</a> project looks interesting, relevant and challenging.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.concurrentaffair.org/2006/10/11/comments-and-questions-about-lapt-javac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

