javac bugs re: class literals and receiver parameters

Alex Buckley alex.buckley at oracle.com
Tue Nov 5 15:14:14 PST 2013


Filed:

JDK-8027886 javac allows illegal receiver parameters

JDK-8027888 javac wrongly allows annotations in array-typed class literals

Alex

On 11/5/2013 2:28 PM, Jonathan Gibbons wrote:
> Please file an issue.
>
> -- Jon
>
> On 11/05/2013 01:51 PM, Alex Buckley wrote:
>> Is anyone looking at this? Should I file a JBS issue? (Also for the
>> related mail re: name of receiver parameter)
>>
>> Alex
>>
>> On 10/22/2013 4:13 PM, Alex Buckley wrote:
>>> Hi list, two bugs to report:
>>>
>>> 1. Annotations are incorrectly allowed within array types in class
>>> literals:
>>>
>>> import java.lang.annotation.ElementType;
>>> import java.lang.annotation.Target;
>>>
>>> @Target(ElementType.TYPE_USE)
>>> @interface T {}
>>>
>>> public class X {
>>>    public static void main(String[] args) {
>>>      Class<?> b = @T int . class;  // Correctly forbidden
>>>      Class<?> c = int @T [] . class;  // Incorrectly allowed
>>>      Class<?> d = int [] @T [] . class;  // Incorrectly allowed
>>>    }
>>> }
>>>
>>> (Formally, a class literal involves a _type name_, not a _type_. For
>>> example, you cannot say List<String>.class or even List<?>.class. As a
>>> result, there is no type within a class literal to annotate. The 308.pdf
>>> file discusses how JLS8 should use TypeName rather than Type in the
>>> grammar of class literals in 15.8, thus clarifying that this is not a
>>> type use.)
>>>
>>> 2. The 'final' modifier is incorrectly allowed on a receiver parameter;
>>> syntactically only modifiers should be allowed in that location.
>>>
>>> ('final' was not permitted in the longstanding
>>> java-annotation-design.pdf file, and I am updating the 308.pdf file to
>>> conform to that.)
>>>
>>> Alex
>


More information about the type-annotations-dev mailing list