@@ -31,9 +31,23 @@ object Type extends SchemaBase {
3131 name = " TYPE_FULL_NAME" ,
3232 valueType = ValueType .String ,
3333 comment = """ This field contains the fully-qualified static type name of the program
34- |construct represented by a node. It is the name of an instantiated type, e.g.,
35- |`java.util.List<Integer>`, rather than `java.util.List[T]`. If the type
36- |cannot be determined, this field should be set to the empty string.
34+ |construct represented by a node. For static languages like Java and CSharp
35+ |this property is supposed to be filled with type names guaranteed to be
36+ |correct. E.g. type names coming from a compiler library or byte code.
37+ |Dynamic languages have no static type information and are supposed
38+ |to fill this property with always the same type name which indicates "any".
39+ |This is why for example for Javascript the type name "ANY" is used.
40+ |Type full names for higher kinded types like `java.util.List<T>` can
41+ |appear with or without a concrete types for `T`. Two examples for Java
42+ |illustrate this:
43+ | 1. `List<Integer> l = null`
44+ | Here the IDENTIFIER and LOCAL nodes for `l` have `java.lang.List<T>`
45+ | as type full name.
46+ | 2. `class SomeGenericClass<A> { void doStuff(List<A> par1) { ... } }`
47+ | Here the METHOD_PARAMETER_IN node for `par` has `java.lang.List<A>`
48+ | as type full name.
49+ |If the type cannot be determined, use some indicative name reflecting this
50+ |fact like "<unresolved>".
3751 |""" .stripMargin
3852 )
3953 .mandatory(PropertyDefaults .String )
0 commit comments