Software Engineering for Smart Data Analytics & Smart Data Analytics for Software Engineering
This fact is used for preserving the original appearance of the source code after transformations. It declares, that no explicit bound for a type parameter or a wildcard in a parameterized type is given (therefore extends Object is used as an implicit bound).
class A<T> { ... List<?> l;
instead of
class A<T extends Object> { ... List<? extends Object> l;
#id: id
ID of the typeParamT element or the parent of the parameterizedTypeT.
#element: wildcardT, null
In case of a parameterizedTypeT this is the ID of the corresponding wildcardT, otherwise (in case of a typeParamT) it's null
class A<T> { ... }
classT(Class, _, 'A', [TypeParam], _), typeParamT(TypeParam, Class, 'T', [RefToObject]), omit_parameterBoundT(TypeParam, null).
ast_relation_type_spec( omit_parameterBoundT,[ ast_arg(id, mult(1,1,no ), id, [id]), ast_arg(element, mult(1,1,no ), id, [wildcardT, nullType]) ]).