_professorj_

This is preliminary documentation for a preliminary version of ProfessorJ.

The interactions window accepts variable declaration, statements and
expressions legal for the level. To use the interactions window for
statements and variable declarations, you must use Alt+Enter instead
of Enter after the ;

The definitions window expects class and interface definitions only
(i.e. what would be given to javac).

Below is a list of known bugs. If you encounter a bug that is not listed here,
please send e-mail directly to me at kathyg@cs.utah.edu 
After known bugs the different language levels are outlined

_Known Bugs as of June 19, 2003

switch statement: Does not work. Programs that contain this statement won't
 even compile
 - Full language level only

synchronized statements: Does not work as expected, will compile.
 - Full language level only

labeled statements: Don't work as expected, will compile and run incorrectly
 - Full language level only

breaking or continuing to a label: Does not work as expected, will compile.
 - Full language level only

native methods: No support at the moment. Unknown if native methods will 
 compile, they should pass the type-checker
 - Full language level only

class and object initialization statements are more permissive than required
 by Java
 - Full and Advanced language levels

Methods may have dead code
 - Intermediate, Advanced, and Full language levels

Parse errors report a general location for the parse error, but nothing 
 specific
 - Advanced, and Full language levels

Recursive functions are slow
 - All language levels

Editor indents as if the program were written in Scheme
 - All language levels

Language level information

_full java_

For Language definition see Java Language Spec Version 2, although
currently a mix of 1.0 and 1.1 syntax is supported. The most notable
exclusion of 1.1 is inner classes. 

The libraries currently in place are:
Object, String, Throwable, and Exceptions (all from java.lang) 

_advanced java_

Language Constructs Supported  | Restrictions
package                        | 
imports                        | Some imports not allowed. List to come
classes                        | Cannot be final
interfaces                     |
arrays                         |
fields                         | Cannot be final
constructors                   |
methods                        |
instance initializers          |
Excluded: class initializers, inner classes & interfaces

Statements Supported    | Restrictions
if                      |
return                  |
block                   |
assignment              |
method call             |
variable declaration    |
while                   |
for                     |
do                      |
break                   | inside a loop
continue                | inside a loop
unary operation ++ & -- |
Excluded: throw, try, switch, label, synchronized

Expressions Supported | Restrictions
Literals              |
this                  |
Binary operations     |
Unary operations      |
Variable reference    |
Field access          |
Array access          |
method call           |
class allocation      |
array allocation      | cannot be anonymous
cast                  |
instanceof            |
? conditional         |
Excluded: qualified name access, assignment

Additional restrictions: Methods and fields that implement reflection
cannot be used, methods that work with Threads cannot be used

_intermediate java_

Language Constructs Supported  | Restrictions
imports                        | Some imports not allowed. List to come
classes                        | Implicitly public
                               | Cannot be final
			       | Cannot have static members
interfaces                     | Implicitly public
			       | Cannot have static members
fields                         | Implicitly private
			       | Cannot be final
constructors                   | Implicitly public
			       | Cannot be overloaded
methods                        | Implicitly public
			       | Cannot be overloaded
Excluded: package, class and instance initializers, inner classes &
interfaces, field and method modifiers, arrays

Statements Supported    | Restrictions
if                      | Must have else
return                  |
block                   |
assignment              | Cannot be +=,-=, etc
method call             |
variable declaration    |
Excluded: throw, while, do for, try, switch, break, continue, label,
synchronized, ++ and --

Expressions Supported | Restrictions
Literals              |
this                  |
Binary operations     | + may not be used as string append
Unary operations      | ++,-- not allowed
Variable reference    |
Field access          |
method call           |
class allocation      |
cast                  |
Excluded: qualified name access, array access, array allocation, array
instantiation, ? conditional, instanceof, assignment

Additional restrictions: Methods and fields that implement reflection
cannot be used, methods that work with Threads cannot be used

_beginner java_

Language Constructs Supported  | Restrictions
imports                        | Some imports not allowed. List to come
classes                        | Implicitly public
                               | Cannot be final
			       | Cannot have static members
fields                         | Implicitly private
			       | Implicitly final
                               | Must be set in constructor
constructors                   | Implicitly public
			       | Cannot be overloaded
			       | May contain only assignments
			       | Required
methods                        | Implicitly public
			       | Cannot be overloaded
			       | Cannot return void
Excluded: package, interfaces, class and instance initializers, inner
classes & interfaces, field and method modifiers, arrays

Statements Supported    | Restrictions
if                      | Must have else
return                  | Must have expression
assignment              | Cannot be +=,-=, etc
			| Must be in constructor
Excluded: block of statements, variable declaration, throw, while, do
for, try, switch, break, continue, label, synchronized, ++ and --

Expressions Supported | Restrictions
Literals              |
this                  |
Binary operations     | + may not be used as string append
Unary operations      | ++,-- not allowed
Variable reference    |
Field access          |
method call           |
class allocation      |
Excluded: cast, qualified name access, array access, array allocation, array
instantiation, ? conditional, instanceof, assignment

Additional restrictions: Methods and fields that implement reflection
cannot be used, methods that work with Threads cannot be used






