Java
The libraries of the "java" collection provide utilities for manipulating Java programs in both source and binary format.
*** CAVEAT: This library is still in its rather early stages. Expect significant changes to the API to occur in the future.
*** ADDITIONAL CAVEAT: The previous caveat is now many years old. The remainder of this file was ported from a doc.txt file.
parameter
(current-classpath) → (listof path)
(current-classpath path-list) → void? path-list : (listof path) 
| 
 | 
| > (current-sourcepath [sp]) :: (parameterof (listof path)) | 
| 
 | 
| A parameter containing a list of paths that point to directories where .java | 
| files reside. This is used by the standard class resolver in | 
| _semantics/standard-resolver.ss_. | 
| 
 | 
| 
 | 
1 syntax/class-file
| This module provides procedures for reading compiled Java .class files according | 
| to the Java class file format, as specified by Chapter 4 of the Java Virtual | 
| Machine Specification, 2nd Ed. | 
| 
 | 
| http://java.sun.com/docs/books/vmspec/2nd-edition/html/VMSpecTOC.doc.html | 
| http://java.sun.com/docs/books/vmspec/2nd-edition/html/ClassFile.doc.html | 
| 
 | 
| > (struct class-file (pool flags this super interfaces fields methods attributes)) | 
| 
 | 
| This structure encapsulates all the information read in from a class file. | 
| 
 | 
| > (extract-access-flags bits) :: exact-integer [(union 'super 'synchronized)] -> (listof access-flag) | 
| 
 | 
| A utility for converting access flags packed in the bits of an exact integer | 
| into a list of their corresponding symbolic names. The possible access flags | 
| occurring in a bit field can be enumerated by taking the union of tables 4.1, | 
| 4.4, 4.5, and 4.7 of the JVM specification. | 
| 
 | 
| Unfortunately, there is a single overlap amongst these tables: both | 
| ACC_SUPER and ACC_SYNCHRONIZED have the value 0x0020. The second optional | 
| argument allows clients to specify which way to interpret the value; by default | 
| the procedure produces the symbol 'super/synchronized. | 
| 
 | 
| Flag name Bit Symbolic value | 
| --------- --- -------------- | 
| ACC_PUBLIC 0x0001 'public | 
| ACC_PRIVATE 0x0002 'private | 
| ACC_PROTECTED 0x0004 'protected | 
| ACC_STATIC 0x0008 'static | 
| ACC_FINAL 0x0010 'final | 
| ACC_SUPER 0x0020 'super | 
| ACC_SYNCHRONIZED 0x0020 'synchronized | 
| ACC_VOLATILE 0x0040 'volatile | 
| ACC_TRANSIENT 0x0080 'transient | 
| ACC_NATIVE 0x0100 'native | 
| ACC_INTERFACE 0x0200 'interface | 
| ACC_ABSTRACT 0x0400 'abstract | 
| ACC_STRICT 0x0800 'strictfp | 
| 
 | 
| > (utf8-info->string ui) :: utf8-info -> string | 
| 
 | 
| Converts a utf8-info struct into a Unicode string. | 
| 
 | 
| > (read-class-file [in]) :: [input-port] -> class-file | 
| 
 | 
| Reads a class file from an input port. | 
| 
 | 
| > access-flag/c :: contract | 
| 
 | 
| Recognizes symbols that name access flags: all of the symbols in the table | 
| above, plus 'super/synchronized. | 
| 
 | 
| The _class-file.ss_ library defines a hierarchy of structures representing the | 
| elements of a class file. The structures are organized according to the | 
| following hierarchy: | 
| 
 | 
| info | 
| | | 
| +-- class-info | 
| | o name-index :: natural-number | 
| | | 
| +-- ref-info | 
| | o class-index :: natural-number | 
| | o name-and-type-index :: natural-number | 
| | | | 
| | +-- field-ref-info | 
| | | | 
| | +-- method-ref-info | 
| | | | 
| | +-- interface-method-ref-info | 
| | | 
| +-- string-info | 
| | o string-index :: natural-number | 
| | | 
| +-- integer-info | 
| | o value :: integer | 
| | | 
| +-- float-info | 
| | o bytes :: bytes | 
| | | 
| +-- long-info | 
| | o high-bytes :: bytes | 
| | o low-bytes :: bytes | 
| | | 
| +-- double-info | 
| | o high-bytes :: bytes | 
| | o low-bytes :: bytes | 
| | | 
| +-- name-and-type-info | 
| | o name-index :: natural-number | 
| | o descriptor-index :: natural-number | 
| | | 
| +-- utf8-info | 
| | o length :: natural-number | 
| | o bytes :: bytes | 
| | | 
| +-- inner-class-entry | 
| | o inner-class-info-index :: natural-number | 
| | o outer-class-info-index :: natural-number | 
| | o inner-name-index :: natural-number | 
| | o inner-class-access-flags :: integer | 
| | | 
| +-- element-info | 
| | o access-flags :: integer | 
| | o name-index :: natural-number | 
| | o descriptor-index :: natural-number | 
| | o attributes-count :: natural-number | 
| | o attributes :: (listof attribute-info) | 
| | | | 
| | +-- field-info | 
| | | | 
| | +-- method-info | 
| | | 
| +-- attribute-info | 
| | | 
| +-- unsupported-attribute-info | 
| | o length :: natural-number | 
| | o bytes :: bytes | 
| | | 
| +-- constant-value-attribute-info | 
| | o value-index :: natural-number | 
| | | 
| +-- code-attribute-info | 
| | | 
| +-- exceptions-attribute-info | 
| | o count :: natural-number | 
| | o exceptions :: (listof natural-number) | 
| | | 
| +-- inner-classes-attribute-info | 
| | | 
| +-- synthetic-attribute-info | 
| | | 
| +-- source-file-attribute-info | 
| | | 
| +-- line-number-table-attribute-info | 
| | | 
| +-- local-variable-table-attribute-info | 
| | | 
| +-- deprecated-attribute-info | 
2 syntax/ast
| 
 | 
| 
 | 
| The _ast.ss_ module defines a hierarchy of structures representing nodes in the | 
| abstract syntax tree of a Java program. The structures are organized according | 
| to the following hierarchy: | 
| 
 | 
| ast | 
| o src :: (optional src) | 
| | | 
| +-- id | 
| | o name :: symbol | 
| | | 
| +-- name | 
| | o path :: (listof id) | 
| | o id :: id | 
| | | 
| +-- import | 
| | o name :: name | 
| | o star? :: boolean | 
| | | 
| +-- type-spec | 
| | o base-type :: type-name | 
| | o dimension :: natural-number | 
| | | 
| +-- modifier | 
| | o modifier :: symbol | 
| | | 
| +-- initializer | 
| | o static? :: boolean | 
| | o body :: block-stmt | 
| | | 
| +-- compilation-unit | 
| | o package :: (optional name) | 
| | o imports :: (listof import) | 
| | o classes :: (listof (optional type-decl)) | 
| | | 
| +-- decl | 
| | o modifiers :: (listof modifier) | 
| | o name :: id | 
| | | | 
| | +-- type-decl | 
| | | o interfaces :: (listof name) | 
| | | o body :: (listof class-element) | 
| | | | | 
| | | +-- class-decl | 
| | | | o super :: (optional name) | 
| | | | | 
| | | +-- interface-decl | 
| | | | 
| | +-- variable-decl | 
| | | o type :: type-spec | 
| | | o init :: (optional expr) | 
| | | | 
| | +-- behavior-decl | 
| | o formals :: (listof variable-decl) | 
| | o throws :: (listof name) | 
| | o body :: block-stmt | 
| | | | 
| | +-- constructor-decl | 
| | | | 
| | +-- method-decl | 
| | o return-type :: type-spec | 
| | | 
| +-- stmt | 
| | | | 
| | +-- expr-stmt | 
| | | o expr :: expr | 
| | | | 
| | +-- labeled-stmt | 
| | | o label :: id | 
| | | o stmt :: (optional stmt) | 
| | | | 
| | +-- block-stmt | 
| | | o body :: (listof block-element) | 
| | | | 
| | +-- switch-stmt | 
| | | o expr :: expr | 
| | | o clauses :: (listof (union case-stmt block-element)) | 
| | | | 
| | +-- case-stmt | 
| | | o test :: (optional expr) | 
| | | | 
| | +-- if-stmt | 
| | | o test :: expr | 
| | | o con :: (optional stmt) | 
| | | o alt :: (optional stmt) | 
| | | | 
| | +-- for-stmt | 
| | | o init :: (union (listof variable-decl) (listof expr)) | 
| | | o test :: (optional expr) | 
| | | o update :: (listof expr) | 
| | | o body :: (optional stmt) | 
| | | | 
| | +-- while-stmt | 
| | | o test :: expr | 
| | | o body :: (optional stmt) | 
| | | | 
| | +-- do-stmt | 
| | | o body :: stmt | 
| | | o test :: expr | 
| | | | 
| | +-- break-stmt | 
| | | o label :: (optional id) | 
| | | | 
| | +-- continue-stmt | 
| | | o label :: (optional id) | 
| | | | 
| | +-- return-stmt | 
| | | o value :: (optional expr) | 
| | | | 
| | +-- throw-stmt | 
| | | o expr :: expr | 
| | | | 
| | +-- synchronized-stmt | 
| | | o expr :: expr | 
| | | o body :: stmt | 
| | | | 
| | +-- try-stmt | 
| | | o body :: block-stmt | 
| | | o catches :: (listof catch-stmt) | 
| | | o finally :: (optional block-stmt) | 
| | | | 
| | +-- catch-stmt | 
| | | o exception :: variable-decl | 
| | | o body :: block-stmt | 
| | | | 
| | +-- assert-stmt | 
| | o predicate :: expr | 
| | o message :: expr | 
| | | 
| +-- expr | 
| | | 
| +-- conditional-expr | 
| | o test :: expr | 
| | o con :: expr | 
| | o alt :: expr | 
| | | 
| +-- prefix-expr | 
| | o op-src :: src | 
| | o operator :: symbol | 
| | o operand :: expr | 
| | | 
| +-- postfix-expr | 
| | o op-src :: src | 
| | o operator :: symbol | 
| | o operand :: expr | 
| | | 
| +-- unary-expr | 
| | o op-src :: src | 
| | o operator :: symbol | 
| | o operand :: expr | 
| | | 
| +-- binary-expr | 
| | o op-src :: src | 
| | o operator :: symbol | 
| | o left :: expr | 
| | o right :: expr | 
| | | 
| +-- instanceof-expr | 
| | o op-src :: src | 
| | o expr :: expr | 
| | o type :: type-spec | 
| | | 
| +-- literal | 
| | o value :: any | 
| | | | 
| | +-- boolean-literal | 
| | | | 
| | +-- char-literal | 
| | | | 
| | +-- integer-literal | 
| | | | 
| | +-- long-literal | 
| | | | 
| | +-- float-literal | 
| | | | 
| | +-- double-literal | 
| | | | 
| | +-- string-literal | 
| | | | 
| | +-- null-literal | 
| | | 
| +-- class-expr | 
| | o type :: type-spec | 
| | | 
| +-- new-object-expr | 
| | o container :: (optional expr) | 
| | o name :: name | 
| | o args :: (listof expr) | 
| | o class-body :: (optional (listof class-element)) | 
| | | 
| +-- new-array-expr | 
| | o type :: type-spec | 
| | o dim-exprs :: (listof expr) | 
| | o dim :: natural-number | 
| | o init :: (optional array-initializer) | 
| | | 
| +-- array-initializer | 
| | o contents :: (listof expr) | 
| | | 
| +-- call-expr | 
| | o object :: (optional expr) | 
| | o name :: name | 
| | o args :: (listof expr) | 
| | | 
| +-- assign-expr | 
| | o operator :: symbol | 
| | o left :: access | 
| | o right :: expr | 
| | | 
| +-- cast-expr | 
| | o type :: type-spec | 
| | o expr :: expr | 
| | | 
| +-- access | 
| | | 
| +-- field-access | 
| | o object :: expr | 
| | o name :: id | 
| | | 
| +-- array-access | 
| | o array :: expr | 
| | o index :: expr | 
| | | 
| +-- var-access | 
| o var :: name | 
| 
 | 
| Every AST node can contain a field of type `src', which represents the source | 
| location information of the item. | 
| 
 | 
| > (struct src (file line col span)) :: (optional path) * (optional natural-number) * (optional natural-number) * (optional natural-number) | 
| 
 | 
| > (name->access name) :: name -> access | 
| 
 | 
| Converts a name to a variable reference. | 
| 
 | 
| > (access->name acc) :: (union field-access var-access) -> name | 
| 
 | 
| Converts a field or local variable reference to a name. | 
| 
 | 
| FIXME: doesn't work with field accesses in general, since those can contain | 
| arbitrary expressions, which can't be represented as names. (In fact, it | 
| appears that field-accesses always have non-name expressions; all other | 
| field refs get mapped to var-access nodes instead.) | 
| 
 | 
| > (increase-type-dimension ts n) :: type-spec natural-number -> type-spec | 
| 
 | 
| Constructs a new type-spec which is equivalent to `ts' except with type | 
| dimension increased by `n'. | 
| 
 | 
| > primitive-type ::= 'void | 'boolean | 'byte | 'short | 'int | 'long | 'char | 'float | 'double | 
| 
 | 
| > (primitive-type? v) :: any -> boolean | 
| 
 | 
| Members of class and interface declarations are represented by the type | 
| `class-element', which is define by: | 
| 
 | 
| > class-element ::= | 
| decl | 
| | (nelistof variable-decl) | 
| | initializer | 
| | #f | 
| 
 | 
| > (class-element? v) :: any -> boolean | 
| 
 | 
| > block-element ::= | 
| decl | 
| | (nelistof variable-decl) | 
| | stmt | 
| | #f | 
| 
 | 
| > (block-element? v) :: any -> boolean | 
| 
 | 
| > type-name ::= | 
| primitive-type | 
| | name | 
| 
 | 
| > (type-name? v) :: any -> boolean | 
3 syntax/lexer
| 
 | 
| 
 | 
| The _lexer.ss_ module provides a lexer for Java. | 
| 
 | 
| > Operators :: empty-tokens | 
| 
 | 
| > Separators :: empty-tokens | 
| 
 | 
| > EmptyLiterals :: empty-tokens | 
| 
 | 
| > Keywords :: empty-tokens | 
| 
 | 
| > BasicTokens :: tokens | 
| 
 | 
| > (struct string-error (string error-token)) :: string position-token | 
| 
 | 
| > (java-lexer in) :: input-port -> position-token | 
| 
 | 
4 syntax/parser
| 
 | 
| ====================================================================== | 
| _syntax/parser.ss_: | 
| ====================================================================== | 
| 
 | 
| The _parser.ss_ module provides a parser for Java. | 
| 
 | 
| > (parse in path) :: [input-port (optional (union path string))] -> ast | 
| 
 | 
| Parses a Java compilation unit (i.e., the contents of a .java file) from an | 
| input port, with the given file name (used for error reporting). | 
| 
 | 
| > (parse-string str) :: string -> ast | 
| 
 | 
| Parses a Java compilation unit from a string. | 
| 
 | 
| > (parse-file path) :: (union path string) -> ast | 
| 
 | 
| Parses a Java compilation unit from a file. | 
5 semantics/semantic-object
| 
 | 
| The _semantic-object.ss_ library defines a hierarchy of mzscheme classes and | 
| interfaces for the representation of the (static) semantic elements of a Java | 
| program, e.g., classes, interfaces, methods, fields, etc. | 
| 
 | 
| > (struct type-name (package type [dimension])) :: (listof symbol) symbol? natural-number | 
| 
 | 
| The `type-name' structure contains enough information to identify a type | 
| uniquely and can be used to look up a type with a class resolver (see | 
| _class-resolver.ss). The `package' field contains the name of the type's package | 
| (primitive types and members of the default package use the empty list). The | 
| `type' field contains the symbolic name of the type. The optional `dimension' | 
| field contains the array dimension and defaults to 0, representing a ground | 
| (i.e., non-array) type. | 
| 
 | 
| > (build-type-name path) :: (listof symbol) -> type-name | 
| 
 | 
| Given a fully qualified type name as a list of symbols, this procedure builds a | 
| `type-name' structure representing that name. | 
| 
 | 
| > (dot-notation path) :: (listof symbol) -> string | 
| 
 | 
| Given a fully qualified type name as a list of symbols, this procedure | 
| constructs the string representation of the fully qualified name in Java | 
| ``dot-notation''. | 
| 
 | 
| > (type-name->string tn) :: (optional type-name) -> string | 
| 
 | 
| Given a `type-name' struct (or #f, representing the ``void'' type), this | 
| procedure constructs the string representation of the fully qualified name in | 
| Java ``dot-notation''. | 
| 
 | 
| > byte, char, double, float, int, long, short, boolean :: primitive-type% | 
| 
 | 
| Objects of class primitive-type% representing the Java primitive types of the | 
| same respective name. | 
| 
 | 
| Interfaces | 
| ---------- | 
| 
 | 
| The mzscheme interfaces defined in this library are organized according to the | 
| following graph: | 
| 
 | 
| semantic-object<%> resolvable<%> | 
| | | | 
| +---------+---------+ | 
| | | 
| type<%> | 
| 
 | 
| ++ interface semantic-object<%> | 
| 
 | 
| > (to-string) :: -> string | 
| 
 | 
| Returns a string representation of the semantic object. | 
| 
 | 
| ++ interface resolvable<%> | 
| 
 | 
| > (get-related-types) :: -> (listof type-name) | 
| 
 | 
| Returns the list of type-names that are referenced in the definition of the | 
| semantic object. | 
| 
 | 
| ++ interface type<%> extends semantic-object<%>, resolvable<%> | 
| 
 | 
| > (get-type-name) :: -> type-name | 
| 
 | 
| Returns the type-name representing the type object. | 
| 
 | 
| Classes | 
| ------- | 
| 
 | 
| The mzscheme classes defined in this library are organized according to the | 
| following hierarchy (classes without parent classes extend the standard mzscheme | 
| object% class): | 
| 
 | 
| package% (semantic-object<%>, resolvable<%>) | 
| 
 | 
| array-type% (type<%>) | 
| 
 | 
| ground-type% (type<%>) | 
| | | 
| +-- primitive-type% | 
| | | 
| +-- declared-type% | 
| | | 
| +-- class% | 
| | | 
| +-- interface% | 
| 
 | 
| type-element% (semantic-object<%>, resolvable<%>) | 
| | | 
| +-- field% | 
| | | 
| +-- behavior% | 
| | | | 
| | +-- constructor% | 
| | | | 
| | +-- method% | 
| | | 
| +-- initializer% | 
| | | 
| +-- inner-type% | 
| 
 | 
| ++ class package% implements semantic-object<%> | 
| 
 | 
| > (new package% (name _)) -> package% | 
| name :: (listof symbol) | 
| 
 | 
| > (to-string) :: -> string | 
| 
 | 
| Returns the package name in dot-notation. | 
| 
 | 
| ++ class array-type% implements type<%> | 
| 
 | 
| > (new array-type% (base-type _)) -> array-type% | 
| base-type :: type-name | 
| 
 | 
| > (get-type-name) :: -> type-name | 
| 
 | 
| > (get-base-type) :: -> type-name | 
| 
 | 
| > (get-dimension) :: -> natural-number | 
| 
 | 
| > (get-related-types) :: -> (listof type-name) | 
| 
 | 
| > (to-string) :: -> string | 
| 
 | 
| ++ class ground-type% implements semantic-object<%>, type<%> | 
| 
 | 
| > (new ground-type% (package _) (name _)) -> ground-type% | 
| package :: (listof symbol) | 
| name :: type-name | 
| 
 | 
| > (get-package) :: -> (listof symbol) | 
| 
 | 
| THIS METHOD IS DEPRECATED. Use (type-name-package (send obj get-type-name)) | 
| instead. In the next major version release, this method will be removed. | 
| 
 | 
| > (get-type-name) :: -> type-name | 
| 
 | 
| > (get-related-types) :: (listof type-name) | 
| 
 | 
| > (to-string) :: -> string | 
| 
 | 
| ++ class primitive-type% extends ground-type% | 
| 
 | 
| > (new primitive-type% (name _)) -> primitive-type% | 
| name :: type-name | 
| 
 | 
| ++ class declared-type% extends ground-type% | 
| 
 | 
| > (new declared-type% (package-name _) (name _) (modifiers _) (interfaces _) (elements _)) -> declared-type% | 
| package-name :: (listof symbol) | 
| name :: type-name | 
| modifiers :: (listof access-flags) | 
| interfaces :: (listof type-name) | 
| elements :: (listof type-element%) | 
| 
 | 
| > (get-modifiers) :: -> (listof access-flag) | 
| 
 | 
| > (get-interfaces) :: -> (listof type-name) | 
| 
 | 
| > (get-elements) :: -> (listof type-element%) | 
| 
 | 
| ++ class class% extends declared-type% | 
| 
 | 
| > (new class% (package _) (name _) (modifiers _) (interfaces _) (elements _) (superclass _)) -> class% | 
| package :: (listof symbol) | 
| name :: type-name | 
| modifiers :: (listof access-flag) | 
| interfaces :: (listof type-name) | 
| elements :: (listof type-element%) | 
| superclass :: (optional type-name) | 
| 
 | 
| > (get-superclass) :: -> (optional type-name) | 
| 
 | 
| ++ class interface% extends declared-type% | 
| 
 | 
| > (new interface% (package _) (name _) (modifiers _) (interfaces _) (elements _)) -> interface% | 
| package :: (listof symbol) | 
| name :: type-name | 
| modifiers :: (listof access-flag) | 
| interfaces :: (listof type-name) | 
| elements :: (listof type-element%) | 
| 
 | 
| ++ class type-element% implements semantic-object<%>, resolvable<%> | 
| 
 | 
| > (new type-element% (name _)) -> type-element% | 
| name :: string | 
| 
 | 
| > (get-name) :: -> (option string) | 
| 
 | 
| > (get-related-types) :: (listof type-name) | 
| 
 | 
| > (to-string) :: -> string | 
| 
 | 
| ++ class field% extends type-element% | 
| 
 | 
| > (new field% (name _) (modifiers _) (type _)) -> field% | 
| name :: string | 
| modifiers :: (listof access-flag) | 
| type :: type-name | 
| 
 | 
| > (get-modifiers) :: -> (listof access-flag) | 
| 
 | 
| > (get-type) :: -> type-name | 
| 
 | 
| ++ class initializer% extends type-element% | 
| 
 | 
| > (new initializer%) -> intializer% | 
| 
 | 
| ++ class behavior% extends type-element% | 
| 
 | 
| > (new behavior% (name _) (formals _) (exceptions _) (modifiers _)) -> behavior% | 
| name :: string | 
| formals :: (listof type-name) | 
| exceptions :: (listof type-name) | 
| modifiers :: (listof access-flag) | 
| 
 | 
| > (get-formals) :: -> (listof type-name) | 
| 
 | 
| > (get-exceptions) :: -> (listof type-name) | 
| 
 | 
| > (get-modifiers) :: -> (listof access-flag) | 
| 
 | 
| ++ class constructor% extends behavior% | 
| 
 | 
| > (new constructor% (name _) (formals _) (exceptions _) (modifiers _)) -> constructor% | 
| name :: string | 
| formals :: (listof type-name) | 
| exceptions :: (listof type-name) | 
| modifiers :: (listof access-flag) | 
| 
 | 
| ++ class method% extends behavior% | 
| 
 | 
| > (new method% (name _) (formals _) (exceptions _) (modifiers _) (return-type _)) -> method% | 
| name :: string | 
| formals :: (listof type-name) | 
| exceptions :: (listof type-name) | 
| modifiers :: (listof access-flag) | 
| return-type :: (optional type-name) | 
| 
 | 
| > (get-return-type) :: -> (optional type-name) | 
| 
 | 
| ++ class inner-type% extends type-element% | 
| 
 | 
| > (new inner-type% (name _) (type _)) -> inner-type% | 
| name :: string | 
| type :: type-name | 
| 
 | 
| > (get-type) :: -> type-name | 
| 
 | 
6 semantics/class-resolver
| 
 | 
| 
 | 
| ;; TODO: this should not be starting out #f | 
| 
 | 
| > (current-class-resolver [cr]) :: (parameterof class-resolver<%>) | 
| 
 | 
| > (lookup-package pkg) :: (listof symbol) -> (optional package%) | 
| 
 | 
| > (lookup-type tn) :: type-name -> (optional type<%>) | 
| 
 | 
| > (resolve-all t) :: (union type-name semantic-object<%>) -> any | 
| 
 | 
| Forces the resolution (via the current class resolver) of the transitive closure | 
| of the `get-related-types' relation on either a semantic object or the type | 
| associated with a type-name. | 
| 
 | 
| ++ interface class-resolver<%> | 
| 
 | 
| > (resolve-package path) :: (listof symbol) -> (optional package%) | 
| 
 | 
| > (resolve-type tn) :: type-name -> (optional type<%>) | 
| 
 | 
7 semantics/standard-resolver
| 
 | 
| ++ class class-resolver% implements class-resolver<%> | 
| 
 | 
| > (new method% (name _) (formals _) (exceptions _) (modifiers _) (return-type _)) -> method% | 
| name :: string | 
| formals :: (listof type-name) | 
| exceptions :: (listof type-name) | 
| modifiers :: (listof access-flag) | 
| return-type :: (optional type-name) | 
| 
 | 
| > (new class-resolver% (classpath _) (sourcepath _)) -> class-resolver% | 
| classpath :: (listof path) | 
| sourcepath :: (listof path) | 
| 
 | 
| The initialization arguments specify the paths to search during class | 
| resolution for binary and source resolution, respectively. Both arguments | 
| are optional. If they are not specified, this class uses the value of | 
| the current-classpath and current-sourcepath parameters, respectively, at | 
| the time when the class was created. Therefore, changing the value of | 
| either of these parameters will *not* affect previously-created instances | 
| of class-resolver%. | 
| 
 | 
| > (resolve-package path) :: (listof symbol) -> (optional package%) | 
| 
 | 
| > (resolve-type tn) :: type-name -> (option type<%>) | 
8 semantics/resolve-source
| 
 | 
| TODO: (resolve-source ast) :: ast -> (listof declared-type%) | 
| 
 | 
9 semantics/resolve-binary
| 
 | 
| > (resolve-binary cf) :: class-file -> declared-type% | 
| 
 |