For completeness, this was added in Java 5. Here are the relevant parts of JLS Third Edition, which covers Java 5 and 6:
8.8.7.1 Explicit Constructor Invocations
ExplicitConstructorInvocation:
NonWildTypeArgumentsopt this ( ArgumentListopt ) ;
NonWildTypeArgumentsopt super ( ArgumentListopt ) ;
Primary. NonWildTypeArgumentsopt super ( ArgumentListopt ) ;
NonWildTypeArguments:
< ReferenceTypeList >
ReferenceTypeList:
ReferenceType
ReferenceTypeList , ReferenceType
15.12 Method Invocation Expressions
MethodInvocation:
MethodName ( ArgumentListopt )
Primary . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )
super . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )
ClassName . super . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )
TypeName . NonWildTypeArguments Identifier ( ArgumentListopt )
Note they are called NonWildTypeArguments
. The term "Type Witness" does not appear in the JLS. In JLS SE 8, the invocation specs are rewritten to use the pre-existing notion of TypeArguments
; and the word "witness" still appears nowhere.
(MethodName
already includes TypeName.Identifier
, so that fifth method invocation defines the explicit usage of a Type Witness, which is why it is not marked optional.)