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 |
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:
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.
Definition at line 99 of file TypeChecker.java.
edu.mit.csail.sdg.squander.spec.TypeChecker.TypeChecker | ( | JavaScene | scene | ) |
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.
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkArity | ( | String | inExpr, | |
JType... | expressions | |||
) | throws TypeCheckException [protected] |
Definition at line 157 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.checkSubtype().
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkBoolean | ( | JType | expr, | |
Node | node | |||
) | throws TypeCheckException [protected] |
Definition at line 167 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitBinary(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitConditional(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitFieldDeclaration(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitQuantification(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitUnary().
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkInteger | ( | JType | expr, | |
Node | node | |||
) | throws TypeCheckException [protected] |
Definition at line 173 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitBinary(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitBracket(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitQuantification(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitUnary().
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkJoin | ( | JType | primary, | |
JType | rest | |||
) | throws TypeCheckException [protected] |
Definition at line 150 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitJoin().
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkSubtype | ( | String | expr, | |
JType | sub, | |||
JType | supr | |||
) | throws TypeCheckException [protected] |
Definition at line 140 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.TypeChecker.checkArity().
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitBinary().
void edu.mit.csail.sdg.squander.spec.TypeChecker.checkUnary | ( | JType | expr, | |
Node | node | |||
) | throws TypeCheckException [protected] |
Definition at line 179 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitArrayType(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitQuantification().
Class<?> edu.mit.csail.sdg.squander.spec.TypeChecker.getClass | ( | String | name | ) | [private] |
Definition at line 806 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.resolveType(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitArrayType().
JType.Unary edu.mit.csail.sdg.squander.spec.TypeChecker.getFldOwner | ( | String | fldName | ) | [private] |
Definition at line 509 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.TypeChecker.clsSpec, edu.mit.csail.sdg.squander.spec.ClassSpec.clz(), edu.mit.csail.sdg.squander.spec.JavaScene.ensureClass(), edu.mit.csail.sdg.squander.spec.ClassSpec.hasSpecField(), edu.mit.csail.sdg.squander.spec.ClassSpec.jtype, edu.mit.csail.sdg.squander.spec.TypeChecker.scene, and edu.mit.csail.sdg.squander.spec.ClassSpec.typeParams().
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitFieldDeclaration().
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] |
Definition at line 676 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitAmbiguous().
JType edu.mit.csail.sdg.squander.spec.TypeChecker.resolveField | ( | NameSpace | env, | |
Node | tree | |||
) | [private] |
Checks whether the node is a field (length and elems are considered fields.)
Definition at line 748 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.JField.declaringType, edu.mit.csail.sdg.squander.spec.NameSpace.findField(), edu.mit.csail.sdg.squander.spec.JField.isStatic(), edu.mit.csail.sdg.squander.spec.JType.product(), edu.mit.csail.sdg.squander.spec.TypeChecker.scene, and edu.mit.csail.sdg.squander.spec.JField.type.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitFieldRelation(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitFrame(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitName().
JType edu.mit.csail.sdg.squander.spec.TypeChecker.resolveType | ( | NameSpace | env, | |
String | name | |||
) | [private] |
Definition at line 764 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.JType.arity(), edu.mit.csail.sdg.squander.spec.NameSpace.declarer(), edu.mit.csail.sdg.squander.spec.JType.domain(), and edu.mit.csail.sdg.squander.spec.TypeChecker.getClass().
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitAmbiguous(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitName(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitRefType().
void edu.mit.csail.sdg.squander.spec.TypeChecker.setClsSpecForSpecField | ( | ClassSpec | clsSpec | ) |
<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] |
Definition at line 684 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.JType.arity(), and edu.mit.csail.sdg.squander.spec.JType.projection().
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitAmbiguous().
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:
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] |
Implementation of a visitor
Definition at line 190 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.NameSpace.method, and edu.mit.csail.sdg.squander.spec.JMethod.paramTypes().
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitArrayType | ( | NameSpace | env, | |
Node | base | |||
) | [protected] |
Definition at line 577 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.TypeChecker.checkUnary(), edu.mit.csail.sdg.squander.spec.JType.domain(), and edu.mit.csail.sdg.squander.spec.TypeChecker.getClass().
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitBinary | ( | NameSpace | env, | |
Node | tree, | |||
int | op, | |||
Node | leftTree, | |||
Node | rightTree | |||
) | [protected] |
Definition at line 241 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.TypeChecker.checkBoolean(), edu.mit.csail.sdg.squander.spec.TypeChecker.checkInteger(), edu.mit.csail.sdg.squander.spec.TypeChecker.checkSubtype(), edu.mit.csail.sdg.squander.spec.JType.difference(), edu.mit.csail.sdg.squander.spec.JType.intersection(), edu.mit.csail.sdg.squander.spec.JType.isInteger(), edu.mit.csail.sdg.squander.spec.JType.product(), and edu.mit.csail.sdg.squander.spec.JType.union().
Definition at line 584 of file TypeChecker.java.
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitBracket | ( | NameSpace | env, | |
JType | primary, | |||
Node | tree | |||
) | [protected] |
Definition at line 200 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.NameSpace.addScope(), edu.mit.csail.sdg.squander.spec.JType.arity(), edu.mit.csail.sdg.squander.spec.TypeChecker.checkInteger(), edu.mit.csail.sdg.squander.spec.JType.domain(), edu.mit.csail.sdg.squander.spec.NameSpace.inArray(), edu.mit.csail.sdg.squander.spec.JType.join(), edu.mit.csail.sdg.squander.spec.JType.range(), and edu.mit.csail.sdg.squander.spec.NameSpace.scope().
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] |
Definition at line 340 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.TypeChecker.checkBoolean(), and edu.mit.csail.sdg.squander.spec.JType.union().
Definition at line 349 of file TypeChecker.java.
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] |
Definition at line 491 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.ClassSpec.addSpecField(), edu.mit.csail.sdg.squander.spec.TypeChecker.checkBoolean(), edu.mit.csail.sdg.squander.spec.TypeChecker.clsSpec, edu.mit.csail.sdg.squander.spec.TypeChecker.getFldOwner(), and edu.mit.csail.sdg.squander.spec.ClassSpec.jtype.
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitFieldRelation | ( | NameSpace | env, | |
Node | type, | |||
Node | ident | |||
) | [protected] |
Definition at line 531 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.NameSpace.addScope(), edu.mit.csail.sdg.squander.spec.JType.range(), and edu.mit.csail.sdg.squander.spec.TypeChecker.resolveField().
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] |
Definition at line 538 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.NameSpace.addScope(), edu.mit.csail.sdg.squander.spec.JType.arity(), edu.mit.csail.sdg.squander.spec.JType.domain(), edu.mit.csail.sdg.squander.spec.JType.isSubtypeOf(), edu.mit.csail.sdg.squander.spec.JType.projectionFromTo(), edu.mit.csail.sdg.squander.spec.JType.range(), and edu.mit.csail.sdg.squander.spec.TypeChecker.resolveField().
Definition at line 589 of file TypeChecker.java.
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitJoinReflexive | ( | NameSpace | env, | |
JType | primary, | |||
Node | tree | |||
) | [protected] |
Definition at line 225 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.NameSpace.addScope(), edu.mit.csail.sdg.squander.spec.JType.arity(), edu.mit.csail.sdg.squander.spec.JType.join(), edu.mit.csail.sdg.squander.spec.JType.range(), and edu.mit.csail.sdg.squander.spec.JType.union().
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.
Definition at line 707 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.JavaScene.ensureClass(), edu.mit.csail.sdg.squander.spec.NameSpace.findLocal(), edu.mit.csail.sdg.squander.spec.JType.isUnary(), edu.mit.csail.sdg.squander.spec.JType.range(), edu.mit.csail.sdg.squander.spec.TypeChecker.resolveField(), edu.mit.csail.sdg.squander.spec.TypeChecker.resolveType(), and edu.mit.csail.sdg.squander.spec.TypeChecker.scene.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitAmbiguous().
Definition at line 364 of file TypeChecker.java.
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] |
Definition at line 374 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.NameSpace.addLocal(), edu.mit.csail.sdg.squander.spec.TypeChecker.checkBoolean(), edu.mit.csail.sdg.squander.spec.TypeChecker.checkInteger(), edu.mit.csail.sdg.squander.spec.TypeChecker.checkUnary(), edu.mit.csail.sdg.squander.spec.JType.domain(), and edu.mit.csail.sdg.squander.spec.JType.product().
Definition at line 410 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.NameSpace.method, and edu.mit.csail.sdg.squander.spec.JMethod.returnType.
JType edu.mit.csail.sdg.squander.spec.TypeChecker.visitString | ( | NameSpace | env, | |
String | s | |||
) | [protected] |
Definition at line 354 of file TypeChecker.java.
Definition at line 420 of file TypeChecker.java.
Definition at line 425 of file TypeChecker.java.
References edu.mit.csail.sdg.squander.spec.NameSpace.declarer(), edu.mit.csail.sdg.squander.spec.JMethod.isStatic, and edu.mit.csail.sdg.squander.spec.NameSpace.method.
Definition at line 415 of file TypeChecker.java.
Definition at line 434 of file TypeChecker.java.
JType.Unary [] edu.mit.csail.sdg.squander.spec.TypeChecker.visitTypeParams | ( | NameSpace | env, | |
Node | node | |||
) | [private] |
Definition at line 696 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.visitAmbiguous().
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().
final JavaScene edu.mit.csail.sdg.squander.spec.TypeChecker.scene [protected] |
Definition at line 101 of file TypeChecker.java.
Referenced by edu.mit.csail.sdg.squander.spec.TypeChecker.getFldOwner(), edu.mit.csail.sdg.squander.spec.TypeChecker.resolveField(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitAmbiguous(), edu.mit.csail.sdg.squander.spec.TypeChecker.visitName(), and edu.mit.csail.sdg.squander.spec.TypeChecker.visitRefType().