*** Jikes 1.22 was released 3 October 2004 This release supports compilation using the rt.jar shipped with the released version of Java 5.0, but otherwise has no more support for new language features than 1.21 did. These specification problems are fixed: 3986 jikes compiles faulty source without error or warning 4042 constructor of strictfp class not strictfp 4046 no warning when overriding a deprecated method These crashes on valid or invalid source are fixed: 3934 Assertion failed: ! array tuple.h line 429 3972 "Assertion failed" on incorrect String operations 3974 Assertion failed: type == control.String() 3989 Assertion `! array' failed with String.class literal These problems with diagnostics are fixed: 3424 Confusing error message for type not found error 3947 static method local shouldn't shadow instance field These other problems are fixed: 495 classpath problems introduced by 1.14 4018 errno undefined (freebsd-4.8 *** Jikes 1.21 was released 16 May 2004 A regression in 1.20 that caused us to complain about supposedly invalid .class files has been rectified. Some minor error message improvements have been made. *** Jikes 1.20 was released 18 April 2004 Many new diagnostics have been added. These include detection of overflow in integer constant expressions, serialization-related checks made by Java 1.5's javac, detection of locals shadowing fields (often caused by an unfinished refactoring that promotes a local to a field) and fields in subclasses that hide fields in superclasses. New command-line options generalize the old -nowarn/+Z to also allow all warnings to be considered errors (with +Z2). The default on vs. off state of several warnings added in 1.19 have been changed, by popular demand. Jikes is more robust in the face of a .java file on the command line that requires another .java file that has a compilation error. However, this area can always be improved, so we appreciate concise test cases where a single error is causing a chain of error messages. Jikes makes a better attempt to detect and warn the user of system errors, such as file not found or directory not writeable. The set of legal characters in identifiers has grown according to Unicode 4.0. Now surrogate character pairs are parsed correctly, according to the improvements in the JDK 1.5 java.lang.Character, so that something like \ud801\udc00 is now an identifier. Jikes now correctly detects an attempt to use a non-static member class from a static one, without proper qualification. Since javac does not yet correctly enforce this, it is likely that existing code has the following bug: class Outer { class NonStatic {} static class Static { NonStatic a; // illegal, jikes now correctly gives an error Outer.NonStatic b; // legal, the proper workaround } } As always, several bugs from the Jikes bug database have been closed. Build support has been slightly improved. Jikes now builds correctly with parallel make invocations, is better at detecting a working iconv that meets jikes' needs, and will use RTTI in debugging mode to help diagnose cast errors. Upstream automake and autoconf improvements allow jikes to compile and install on more platforms. The `-target 1.5' option produces class files compatible with Sun's JDK 1.5 virtual machine (the biggest changes are that class literals take much less space, and String concatenation is more efficient). Also, the EnclosingMethod attribute is now used to improve reflection. Fixed bug where compiling with classfiles produced by JDK 1.5 caused an assertion error when read by jikes. Some beta support for JDK 1.5 features is being added. To try it out, you must build jikes yourself, and use the --enable-source15 configure option. Once compiled, the following items are supported by using the `-source 1.5' command line argument (but possibly with bugs): - Hexadecimal floating point literals, documented in java.lang.Float.valueOf(String) and similar to the C99 language. For example, 0x1.8p+0d is now the same as 1.5d. - The enhanced loop of JSR 201 is (mostly) supported. The only non-specified behavior is a compiler hack to allow using a non-Object variable when looping over an iterator, since generic iterators are not yet supported. For example, this code: for (int i : new int[] {1}); for (Object o : Collections.singleton("")); is short for: int[] ia = new int[] {1}; for (int i1 = 0; i1 < ia.length; i1++) { int i = ia[i1]; } for (Iterator it = Collections.singleton("").iterator(); i.hasNext(); ) { Object o = i.next(); } - Generics (type parameters) parse correctly, but are not otherwise supported. - Annotations parse correctly, but are not otherwise supported. - Variadic methods (varargs) parse correctly, but are treated as though the final parameter used '[]' instead of '...'. - Enumerations parse correctly, but are not otherwise supported. - Static imports parse correctly, but are not otherwise supported. - Autoboxing and autounboxing are not supported. *** Jikes 1.19 was released 1 February 2004. The default -source and -target options are now 1.4 (that is, the assert statement now compiles by default); for the old behavior you must specify -source 1.3 or -target 1.3 at the command line. Command line options have been improved. * Some pedantic warnings are controlled by name, so that you can select which warnings you get (for example, not everyone wants to know that 1L is preferred over 1l when writing a long literal). * More switches have long names. * Default state of switches now printed with --help. * New switch -Xswitchcheck: Warn about fallthrough in switch statements (compatible with javac). * New switch +Pnaming-convention: Warn about naming choices that violate Java's naming conventions. This switch is currently ON by default, +Pno-naming-convention will disable it for sites that use a different naming convention. * New switch --noassert: Omits assertions from .class files (not recommended for normal development, but provided to allow you to do -source 1.4 -target 1.3). * Now supports -target 1.4.2 (compatible with javac, no changes from -target 1.4 in emitted code). Warnings are given for some common violations of Joshua Bloch's book "Effective Java." Error text has been improved for method calls, to list the parameter types the compiler is trying to match. Error text on duplicate declarations tries harder to list the original declaration. The identifier `enum' will become a keyword once -source 1.5 is implemented (JDK 1.5: addition of generics (JSR 14); attributes (JSR 175); autoboxing, enhanced for loop, enums, static import, and varargs (JSR 201); and enhanced .class files (JSR 202)). Therefore, the compiler now warns where it is used as an identifier. The check for method ambiguity no longer looks at the type that declared each method. Code that once caused an ambiguous method error is now legal, per Sun bug 4761586: class A { void m(byte b) {} } class B extends A { void m(int i) {} void foo(byte b) { m(b); // now calls inherited A.m(byte), rather than ambiguous } } Blank finals used inside a local class must be definitely assigned before the class declaration, rather than simply before all calls to a constructor of the local class. For example, this code now causes an error: class C { void m() { final int i; class Local { int j = i; } // i has not been assigned before here i = 1; new Local(); // even though it has been before creating a Local } } The scope of a local class declaration statement in a switch statement is corrected to be only the nearest case label (unlike local variable declarations which remain in scope for the entire switch statement). This has the following effects: class D { void m(int i) { switch (i) { case 0: class One {} class Two {} int j; int k; break; case 1: // new One(); // now illegal, declaration no longer in scope class Two {} // now legal, no conflict with prior declaration j = 1; // remains legal as before // int k; // remains illegal as before } } } Constant instance variables are now initialized sooner, so that you cannot view their default 0 value even with reflection. The statement 'throw null;' is now treated as an unchecked exception, since it always results in a NullPointerException being thrown. This also means that throwing null does not make a checked exception catch clause reachable. Improved the parser. A few more syntactic errors have been deferred to semantic errors, in order to give a more helpful message. The parser is slightly faster [for those that know parser theory, it is now LALR(1) instead of LALR(2)]. The compiler now works around a bug in VMs when storing an array into a multi-dimensional array expression that happened to be null. Extraneous error messages about non zip or jar content in extdirs has been removed. As always, minor bug fixes for several bugs in the database. *** Jikes 1.18 was released 21 November 2002. Compilation that encounters syntax errors is more robust. An assertion failure involving placeholder_type was solved. Other minor bugs have been fixed. *** Jikes 1.17 was released 27 September 2002. The regression with empty if-clauses was fixed. Inheritance issues and name shadowing were improved. Package handling was improved somewhat. Many other bugs were fixed. NEWS was not properly maintained in prior versions.