The PEF types ending in a capital S (sourceFolderS, projectS, fileS) represent the language-independent organisation of Source code in projects, directories and files. All other PEF types represent language-specific elements of the Java AST. Their name ends in T, which is a mnemonic for Tree.
See the Migration guide for a more detailed discussion of language-independent versus language-dependent elements.
Among the PEF's that represent parts of the AST, we distinguish Program Elements from Attributes:
Program elements represent nodes in the AST. They always have their own identity in their first argument and the identity of their parent element in the second argument.
Elements of method bodies (statements and expressions) additionally have the reference to the containing method or field (in case of initialisation blocks) as a third argument1).
There are no general rules about the structure / contents of other arguments.
Attributes represent information about program elements that is factored out, either because
interfaceT(#class)indicates that a class is actually an interface.
modifierT(#element, 'modifier')is a proper attribute.
extendsT(#class,#class)is a relation that indicates that one class type extends the other.