[Checkers] IGJ And Type Inference
Jaime Quinonez
jaimeq at MIT.EDU
Wed Mar 19 15:43:24 EDT 2008
Mahmood,
> Yes, I didn't mean that supporting partially annotated code would
> require either approach. However, I was highlighting the two uses of
> any type inference system and claiming that they require some what
> different user experience:
> 1. bytecode support:
> - binary libraries are usually either fully annotated or not. It's
> useless for a vendor to distribute a partially annotated binary.
> - Users simply want to use the type inference tool for binary files
> just so that their own code compiles properly. Personally, I will
> not debug the output of the inference tool for such system unless
> they impact my own code annotation in unexpected ways.
> - It is OK for to simply output the annotation in a different index
> file. As long as my code compiles and it's a matter of an extra
> argument for compiling, I wouldn't care about how the annotations
> are represented.
>
> 2. Source support:
> - It is usually partially annotated.
> - I expect the use to interact with the type inference within an IDE.
> - Requires support of iterative process. Command-line commands
> aren't quite good in this.
> - Annotations should really go into the source directly and not a
> separate index file. It's OK to have the index file as an
> intermediate representation and automate the process of insertion to
> source. As a user of the tool, I wouldn't like to spend time simply
> copying annotations to the source. I would like to see the
> annotations on code mainly for the next modules, and it's couter-
> productive to consult the seperate index file everytime I develop
> new code.
>
> If the annotation file format allows for insertion into the source
> directly. That's great. Otherwise, I wouldn't use it.
>
These are good points, and are worth thinking about. I suspect an IDE
could just use a combination of the compiler, a bytecode tool and the
annotation file utilities to quickly infer and insert annotations into
the source code, although the delay may be significant and would not
provide a nice user experience.
Also, just to make sure you're aware of this, the annotation file
utilities are currently here:
http://groups.csail.mit.edu/pag/jsr308/annotation-file-utilities/
Note that they haven't been updated in a very long time, because there
really isn't anything that can be done with them until the classfile
specification changes.
>
>>> 2. I believe that it is highly desirable (yet not quite important)
>>> that the type inference tool does not load the classes.
>> What do you mean by 'load' exactly?
> I mean that it wouldn't call ClassLoader.loadClass(). This is not a
> memory requirement, but I think that it's desirable, but not
> necessary *required*, to be able to annotate a class that the JVM
> depends on (e.g. java.util.Stack, java.lang.Object), or a class that
> requires jni native linking without getting UnsatisfiedLinkError.
>
> That excludes using the javac compiler and the checker framework. I
> assume that Soot doesn't do that.
>
Ah, I see. Yes, Soot reads every class it analyzes, up to and
including Object, from .class files on the filesystem, according to a
command-line classpath argument. This means you can annotate any
arbitrary class. More importantly, at least for Javarifier, you *
have * to annotated JDK classes. Even if Javarifier worked on the
JDK, you don't want to have to keep redoing that work. Reading the
JDK from stub classes also allows you to make small changes to the
results and then use the modified library.
Jaime
More information about the checkers
mailing list