edu.mit.csail.sdg.squander.spec.TypeChecker Class Reference
[Specification]

Collaboration diagram for edu.mit.csail.sdg.squander.spec.TypeChecker:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 TypeChecker (JavaScene scene)
void setClsSpecForSpecField (ClassSpec clsSpec)
JType visitAmbiguous (NameSpace env, List< Node > idents)
JType visitName (NameSpace env, Node ident)

Static Public Member Functions

static void main (String[] args)

Protected Member Functions

void validate (Node tree, JType type)
void checkSubtype (String expr, JType sub, JType supr) throws TypeCheckException
void checkJoin (JType primary, JType rest) throws TypeCheckException
void checkArity (String inExpr, JType...expressions) throws TypeCheckException
void checkBoolean (JType expr, Node node) throws TypeCheckException
void checkInteger (JType expr, Node node) throws TypeCheckException
void checkUnary (JType expr, Node node) throws TypeCheckException
JType visitArgument (NameSpace env, int i)
JType visitBracket (NameSpace env, JType primary, Node tree)
JType visitJoin (NameSpace env, JType primary, Node tree)
JType visitJoinReflexive (NameSpace env, JType primary, Node tree)
JType visitMethodCall (NameSpace env, JType receiver, String name, Node arguments)
JType visitBinary (NameSpace env, Node tree, int op, Node leftTree, Node rightTree)
JType visitConditional (NameSpace env, Node condTree, Node leftTree, Node rightTree)
JType visitDecimal (NameSpace env, int i)
JType visitString (NameSpace env, String s)
JType visitFalse (NameSpace env)
JType visitNull (NameSpace env)
JType visitOld (NameSpace env, Node sub)
JType visitQuantification (NameSpace env, int op, List< String > names, List< String > mults, List< Node > sets, Node expr)
JType visitReturn (NameSpace env)
JType visitThrow (NameSpace env)
JType visitSuper (NameSpace env)
JType visitThis (NameSpace env)
JType visitTrue (NameSpace env)
JType visitUnary (NameSpace env, Node tree, int op, Node expr)
JType visitFieldDeclaration (NameSpace env, Node ident, int op, Node set, Node frame, Node constraint)
JType visitCastExpression (NameSpace env, Node type, Node sub)
JType visitFieldRelation (NameSpace env, Node type, Node ident)
JType visitFrame (NameSpace env, List< JType > joins, List< Node > fields, List< JType > selectors, List< JType > lowers, List< JType > uppers)
JType visitArrayType (NameSpace env, Node base)
JType visitBooleanType (NameSpace env)
JType visitIntegralType (NameSpace env)
JType visitRefType (NameSpace env, Node source, List< Node > idents)

Protected Attributes

final JavaScene scene

Private Member Functions

JType.Unary getFldOwner (String fldName)
String print (List< Node > rest)
JType setTypeParams (JType primary, JType.Unary[] typeParams)
JType.Unary[] visitTypeParams (NameSpace env, Node node)
JType resolveField (NameSpace env, Node tree)
JType resolveType (NameSpace env, String name)
Class<?> getClass (String name)

Private Attributes

ClassSpec clsSpec

Detailed Description

Analysis that tries to determine the type of expressions in the expression tree. In addition, it resolves all name identifiers to corresponding fields, determines the meaning of syntactically ambiguous expressions (which may depend on semantic type information.)

The analysis runs without any knowledge of relevant sub types of any given Java type (unlike subsequent translation phase.) The goal is to determine the scope of specification expressions in terms of elements of a Java program. The scope includes:

  1. all relevant types (most importantly the type of fields) that are directly or indirectly referenced in the source;;
  2. all relevant concrete and abstract fields;

The analysis mutates the tree by augmenting nodes with type information that is reused in translation.

Type inference is performed by the rules described in the corresponding comment sections. The rules follow Java guide lines of static type checking in combination of Alloy-style higher-arity types and set operations on types.

Author:
kuat
Aleksandar Milicevic

Definition at line 99 of file TypeChecker.java.


Constructor & Destructor Documentation

edu.mit.csail.sdg.squander.spec.TypeChecker.TypeChecker ( JavaScene  scene  ) 
Parameters:
scene 
clsSpec should be non-null only when type-checking spec fields, in which cases the value of this field should the declaring class of the spec field.

Definition at line 116 of file TypeChecker.java.


Member Function Documentation

void edu.mit.csail.sdg.squander.spec.TypeChecker.checkArity ( String  inExpr,
JType...  expressions 
) throws TypeCheckException [protected]
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkBoolean ( JType  expr,
Node  node 
) throws TypeCheckException [protected]
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkInteger ( JType  expr,
Node  node 
) throws TypeCheckException [protected]
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkJoin ( JType  primary,
JType  rest 
) throws TypeCheckException [protected]
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkSubtype ( String  expr,
JType  sub,
JType  supr 
) throws TypeCheckException [protected]
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkUnary ( JType  expr,
Node  node 
) throws TypeCheckException [protected]
Class<?> edu.mit.csail.sdg.squander.spec.TypeChecker.getClass ( String  name  )  [private]
JType.Unary edu.mit.csail.sdg.squander.spec.TypeChecker.getFldOwner ( String  fldName  )  [private]
static void edu.mit.csail.sdg.squander.spec.TypeChecker.main ( String[]  args  )  [static]

Definition at line 741 of file TypeChecker.java.

String edu.mit.csail.sdg.squander.spec.TypeChecker.print ( List< Node >  rest  )  [private]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.resolveField ( NameSpace  env,
Node  tree 
) [private]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.resolveType ( NameSpace  env,
String  name 
) [private]
void edu.mit.csail.sdg.squander.spec.TypeChecker.setClsSpecForSpecField ( ClassSpec  clsSpec  ) 
Parameters:
<b>should be non-null only when type-checking spec fields, in which cases the value of this field should the declaring class of the spec field.

Definition at line 126 of file TypeChecker.java.

Referenced by edu.mit.csail.sdg.squander.spec.ClassSpec.ensureField().

JType edu.mit.csail.sdg.squander.spec.TypeChecker.setTypeParams ( JType  primary,
JType.Unary[]  typeParams 
) [private]
void edu.mit.csail.sdg.squander.spec.TypeChecker.validate ( Node  tree,
JType  type 
) [protected]

Definition at line 131 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitAmbiguous ( NameSpace  env,
List< Node >  idents 
)

This part is somewhat tricky due to ambiguity between package names, type names, and field dereferences. The best strategy that we may follow is to consult JLS 3.0. Refer to section 6.5 for details of classification of ambiguous names.

Ambiguous qualified names A.n where n is a simple name are classified as follows:

  • if A is a package name, then check if n is a type declared in the package, in which case reclassify as type name; otherwise, leave as a package name
  • if A is a type name, then check if n is a field of A; else check if n is a member type of A; else report an error
  • if A is an expression, then let T be its type. If n is a field of T, classify as an expression, else if n is a member type, classify of a type name, else report an error

Definition at line 625 of file TypeChecker.java.

References edu.mit.csail.sdg.squander.spec.NameSpace.addScope(), edu.mit.csail.sdg.squander.spec.JavaScene.ensureClass(), edu.mit.csail.sdg.squander.spec.JType.join(), edu.mit.csail.sdg.squander.spec.ClassSpec.jtype, edu.mit.csail.sdg.squander.spec.TypeChecker.print(), edu.mit.csail.sdg.squander.spec.JType.range(), edu.mit.csail.sdg.squander.spec.TypeChecker.resolveType(), edu.mit.csail.sdg.squander.spec.TypeChecker.scene, edu.mit.csail.sdg.squander.spec.TypeChecker.setTypeParams(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitName(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitTypeParams().

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitArgument ( NameSpace  env,
int  i 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitArrayType ( NameSpace  env,
Node  base 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitBinary ( NameSpace  env,
Node  tree,
int  op,
Node  leftTree,
Node  rightTree 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitBooleanType ( NameSpace  env  )  [protected]

Definition at line 584 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitBracket ( NameSpace  env,
JType  primary,
Node  tree 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitCastExpression ( NameSpace  env,
Node  type,
Node  sub 
) [protected]

Definition at line 525 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitConditional ( NameSpace  env,
Node  condTree,
Node  leftTree,
Node  rightTree 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitDecimal ( NameSpace  env,
int  i 
) [protected]

Definition at line 349 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitFalse ( NameSpace  env  )  [protected]

Definition at line 359 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitFieldDeclaration ( NameSpace  env,
Node  ident,
int  op,
Node  set,
Node  frame,
Node  constraint 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitFieldRelation ( NameSpace  env,
Node  type,
Node  ident 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitFrame ( NameSpace  env,
List< JType joins,
List< Node >  fields,
List< JType selectors,
List< JType lowers,
List< JType uppers 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitIntegralType ( NameSpace  env  )  [protected]

Definition at line 589 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitJoin ( NameSpace  env,
JType  primary,
Node  tree 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitJoinReflexive ( NameSpace  env,
JType  primary,
Node  tree 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitMethodCall ( NameSpace  env,
JType  receiver,
String  name,
Node  arguments 
) [protected]

Definition at line 236 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitName ( NameSpace  env,
Node  ident 
)
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitNull ( NameSpace  env  )  [protected]

Definition at line 364 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitOld ( NameSpace  env,
Node  sub 
) [protected]

Definition at line 369 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitQuantification ( NameSpace  env,
int  op,
List< String >  names,
List< String >  mults,
List< Node >  sets,
Node  expr 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitRefType ( NameSpace  env,
Node  source,
List< Node >  idents 
) [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitReturn ( NameSpace  env  )  [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitString ( NameSpace  env,
String  s 
) [protected]

Definition at line 354 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitSuper ( NameSpace  env  )  [protected]

Definition at line 420 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitThis ( NameSpace  env  )  [protected]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitThrow ( NameSpace  env  )  [protected]

Definition at line 415 of file TypeChecker.java.

JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitTrue ( NameSpace  env  )  [protected]

Definition at line 434 of file TypeChecker.java.

JType.Unary [] edu.mit.csail.sdg.squander.spec.TypeChecker.visitTypeParams ( NameSpace  env,
Node  node 
) [private]
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitUnary ( NameSpace  env,
Node  tree,
int  op,
Node  expr 
) [protected]

Member Data Documentation

should be non-null only when type-checking spec fields, in which cases the value of this field should the declaring class of the spec field.

Definition at line 107 of file TypeChecker.java.

Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.getFldOwner(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitFieldDeclaration().


The documentation for this class was generated from the following file:
Generated by  doxygen 1.6.2-20100208