edu.rice.cs.dynamicjava.symbol
Class TreeClass

java.lang.Object
  extended by edu.rice.cs.dynamicjava.symbol.TreeClass
All Implemented Interfaces:
Access.Limited, Access.Module, DJClass

public class TreeClass
extends Object
implements DJClass

A DJClass wrapper for a parsed class or interface declaration.

A DJClass object must be available before any types can be created in terms of the class. Thus all class declarations introduced in some scope must have corresponding DJClasses before processing the supertypes and type parameters, etc., of those declarations. Here we handle much of this process by recursively creating all members of the given class at the time of creation, and tagging the declarations with these new objects. The members of the resulting DJClass are immediately available; type parameters and supertypes are initialized with stub Object types until the actual types can be resolved (note that, until actual types are resolved, the results of a member lookup on a TreeClass will be incorrect; but, as complex dependencies sometimes exist between name and supertype resolution, this stub information is sometimes useful).


Constructor Summary
TreeClass(String fullName, DJClass declaring, Access.Module accessModule, Node ast, TreeClassLoader loader, Options opt)
          All the class's declared members are indexed, and the FIELD, METHOD, and DJ_CLASS properties are set (applied recursively).
 
Method Summary
 Access accessibility()
          The symbol's access level.
 Access.Module accessModule()
          Get the module enclosing this symbol's declaration.
 Node declaration()
           
 Iterable<DJClass> declaredClasses()
           
 Iterable<DJConstructor> declaredConstructors()
           
 Iterable<DJField> declaredFields()
           
 Iterable<DJMethod> declaredMethods()
           
 String declaredName()
          Produce the (unqualified) declared name of the given class
 Iterable<Type> declaredSupertypes()
          List the declared supertypes of this class
 Iterable<VariableType> declaredTypeParameters()
          List all type variables declared by this class
 DJClass declaringClass()
          The class that declares this class, or null if this is declared at a top-level or local scope
 boolean equals(Object o)
          Equality must be defined so that distinct DJClasses that wrap the same class are equal.
 String fullName()
          Produces the binary name for the given class (as in Class.getName())
 int hashCode()
          Equality must be defined so that distinct DJClasses that wrap the same class are equal.
 boolean hasRuntimeBindingsParams()
           
 Type immediateSuperclass()
           
 boolean isAbstract()
           
 boolean isAnonymous()
           
 boolean isFinal()
           
 boolean isInterface()
           
 boolean isStatic()
           
 Class<?> load()
          Produce the runtime representation of the class (as in ClassLoader.loadClass(java.lang.String), repeated invocations should produce the same object).
 String packageName()
           
 String toString()
           
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

TreeClass

public TreeClass(String fullName,
                 DJClass declaring,
                 Access.Module accessModule,
                 Node ast,
                 TreeClassLoader loader,
                 Options opt)
All the class's declared members are indexed, and the FIELD, METHOD, and DJ_CLASS properties are set (applied recursively).

Parameters:
fullName - The fully-qualified name of the class, as in Class.getName().
declaring - The declaring class of this class, or null if it appears at a top level or local scope.
accessModule - The access module for this class, or null if it is its own access module
ast - The parsed declaration of this class. Must be a TypeDeclaration, AnonymousAllocation, or AnonymousInnerAllocation.
loader - A class loader for compiling and loading this class. Note that the loader must be defined to allow transitive loading of all referenced classes.
Method Detail

declaration

public Node declaration()

packageName

public String packageName()
Specified by:
packageName in interface Access.Module
Specified by:
packageName in interface DJClass

fullName

public String fullName()
Produces the binary name for the given class (as in Class.getName())

Specified by:
fullName in interface DJClass

isAnonymous

public boolean isAnonymous()
Specified by:
isAnonymous in interface DJClass

declaredName

public String declaredName()
Description copied from interface: DJClass
Produce the (unqualified) declared name of the given class

Specified by:
declaredName in interface Access.Limited
Specified by:
declaredName in interface DJClass

isInterface

public boolean isInterface()
Specified by:
isInterface in interface DJClass

isStatic

public boolean isStatic()
Specified by:
isStatic in interface DJClass

isAbstract

public boolean isAbstract()
Specified by:
isAbstract in interface DJClass

isFinal

public boolean isFinal()
Specified by:
isFinal in interface DJClass

accessibility

public Access accessibility()
Description copied from interface: Access.Limited
The symbol's access level.

Specified by:
accessibility in interface Access.Limited
Specified by:
accessibility in interface DJClass

accessModule

public Access.Module accessModule()
Description copied from interface: Access.Limited
Get the module enclosing this symbol's declaration.

Specified by:
accessModule in interface Access.Limited

hasRuntimeBindingsParams

public boolean hasRuntimeBindingsParams()
Specified by:
hasRuntimeBindingsParams in interface DJClass

declaringClass

public DJClass declaringClass()
The class that declares this class, or null if this is declared at a top-level or local scope

Specified by:
declaringClass in interface DJClass

declaredTypeParameters

public Iterable<VariableType> declaredTypeParameters()
List all type variables declared by this class

Specified by:
declaredTypeParameters in interface DJClass

declaredSupertypes

public Iterable<Type> declaredSupertypes()
List the declared supertypes of this class

Specified by:
declaredSupertypes in interface DJClass

declaredFields

public Iterable<DJField> declaredFields()
Specified by:
declaredFields in interface DJClass

declaredConstructors

public Iterable<DJConstructor> declaredConstructors()
Specified by:
declaredConstructors in interface DJClass

declaredMethods

public Iterable<DJMethod> declaredMethods()
Specified by:
declaredMethods in interface DJClass

declaredClasses

public Iterable<DJClass> declaredClasses()
Specified by:
declaredClasses in interface DJClass

immediateSuperclass

public Type immediateSuperclass()
Specified by:
immediateSuperclass in interface DJClass
Returns:
The type bound to super in the context of this class, or null if super is not defined

load

public Class<?> load()
Produce the runtime representation of the class (as in ClassLoader.loadClass(java.lang.String), repeated invocations should produce the same object).

Specified by:
load in interface DJClass

toString

public String toString()
Overrides:
toString in class Object

equals

public boolean equals(Object o)
Description copied from interface: DJClass
Equality must be defined so that distinct DJClasses that wrap the same class are equal.

Specified by:
equals in interface DJClass
Overrides:
equals in class Object

hashCode

public int hashCode()
Description copied from interface: DJClass
Equality must be defined so that distinct DJClasses that wrap the same class are equal.

Specified by:
hashCode in interface DJClass
Overrides:
hashCode in class Object