16 lines (14 with data), 2.2 kB
Known bugs in Jlint
-------------------
Priority (1 = highest) Bug
1 Control flow (if/while/for/exceptions) does not work (in method_desc::basic_blocks_analysis). Conditionals and jumps (in Bytecode) seem to be ignored. local_context classes are undocumented and therefore hard to use/fix. Result: many spurious warnings in cases where control flow is transferred inside a lock (e. g. with return). However, these warnings are easily verified manually (10 seconds per warning for an experienced user).
1 Empty output if single message (rather than message categories) are disabled. Current fix with grep -v...
2 In some circumstances, a lot of "Lock x is acquired while holding lock y, with other thread holding lock y and requesting x." warnings are given. Sometimes, the same warning is printed many times. Usually "x" and "y" were the same string (sometimes referring to unnamed local variables). These warnings are sometimes justified, sometimes certainly not. They should also only appear once.
2 "Method wait() can be invoked with monitor of other object locked." However, no list of locks given; apparently no other monitor is held. Justified warning or bug?
2 "Method xy can be called from different threads and is not synchronized." is now sometimes issued several times for same method.
2 Spurious warnings of type "Lock x is requested while holding lock <unknown>, with other thread holding x and requesting lock <unknown>" when a thread acquires the same lock twice.
2 "Method java/lang/Object.equals(java.lang.Object) is not overridden by method with the same name of derived class 'x'." However, argument is of type "String", not "Object" (maybe cannot be checked statically in all cases?)
2 Sometimes, (spurious) duplicate loop warnings are given, with an incorrect line number, after the real loop warning.
3 Warnings about access to "synthetic" fields or methods are given. However, these should be ignored.
3 Loop ID numbering is no longer correct. Loop numbers in warnings no longer necessarily start with "1" and are not always consecutive. This is a consequence of the extra analyses that interfere with the loop count. Loop IDs are still unique.
3 Jlint crashes if the SourceDir attribute in the .class file is broken.