Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering
Represents an access to
#id: id
the unique ID assigned to this fact.
#parent: id
ID of the parent node.
#encl: methodT, constructorT, classInitializerT, fieldT
ID of the fact that represents the method, constructor, class initializer or field definition that contains this (pseudo-)variable access.
#symbol: localT, paramT, classT
ID of the referenced local variable, parameter or class.
identT(..., ..., ..., 'null'). % access to 'null' identT(..., ..., ..., #idOfParamT). % access to parameter identT(..., ..., ..., #idOfLocalT). % access to local var identT(..., ..., ..., #idOfSuperclass). % access to 'super' identT(..., ..., ..., #idOfOwnClass). % access to 'this'
An access to 'super' that refers to the superclass Class is detected by
access_to_super(Id,Class) :- identT(Id, _, _, Class), % an identifier classT(Class, _,_,_), % that references a class not( ast_ancestor(Id, Class)). % that does not contain the identifier
An explicit access to 'this' in class Class is detected by
access_to_this(Id,Class) :- identT(Id, _, _, Class), % an identifier classT(Class, _,_,_), % that references a class ast_ancestor(Id, Class). % that contains the identifier
public Object m(int i) { int j=0; ... x = i + j; ... Object o = super.abc; ... return this; }
For better readability IDs are represented by symbolic constants prefixed with #.
methodT(#encl, ..., 'm', [], #refToObject, [], ...). paramT(#symbol1, ..., #refToInt, 'i'). localT(#symbol2, ..., #encl, #refToInt, 'j', ...). ... operationT(#parent, ..., #encl, [#id1, #id2], '+', 0). identT(#id1, #parent, #encl, #symbol1). identT(#id2, #parent, #encl, #symbol2). ... localT(#symbol3, ..., #encl, #refToObject, 'o', #get). getFieldT(#get, #symbol3, #encl, #id3, abc, #abc). identT(#id3, #get, #encl, #superclass). ... returnT(#retid, ..., #encl, #ident). identT(#ident, #retid, #encl, #classOfThis).
ast_node_type_spec(identT,[ ast_arg(id, mult(1,1,no ), id, [identT]), ast_arg(parent, mult(1,1,no ), id, [id]), ast_arg(encl, mult(1,1,no ), id, [methodT, constructorT, classInitializerT, fieldT]), ast_arg(ref, mult(1,1,no ), id, [classT,localT,paramT]) ]).