The changes look good to me.
I am starting to come into agreement with Remi though that unless a type
specific array can be created for situations like the E[] elements array in
ArrayDeque then it should be declared as Object[] array since that's what is
actually created.
Mike
On Aug 31 2012, at 12:06 , Dan Xu wrote:
> On 08/30/2012 06:45 PM, Stuart Marks wrote:
>> On 8/30/12 7:14 AM, Ulf Zibis wrote:
>>> Am 30.08.2012 01:20, schrieb Stuart Marks:
>>>> On 8/29/12 4:36 AM, Ulf Zibis wrote:
>>>>>> @SuppressWarnings("fallthrough") is put to suppress warnings generated by
>>>>>> another switch/case statements
>>>>> Can't you move it from method scope to there?
>>>>>
>>>>>> while (i >= matchlen && !seencomma) {
>>>>>> switch(a[i-matchlen]) {
>>>>>> case ',':
>>>>>> seencomma = true;
>>>>>> /*FALLTHROUGH*/
>>>>>> case ' ': case '\r': case '\n':
>>>>>> case '\f': case '\t':
>>>>>> break;
>>>>>> default:
>>>>>> throw new IllegalArgumentException(
>>>>>> "invalid permission: " + actions);
>>>>>> }
>>>>>> i--;
>>>>>> }
>>>>
>>>> Unfortunately there is no suitable place to put the annotation. Annotations
>>>> can only be placed on declarations, and the narrowest enclosing declaration
>>>> around this switch statement is, unfortunately, the entire method. One
>>>> might
>>>> consider refactoring the switch statement into its own method, but that
>>>> kind
>>>> of refactoring is too large a change for warnings cleanup.
>>>
>>> I can see that it is reasonable/possible to bind a
>>> @SuppressWarnings("unchecked") to a declaration which contains the unchecked
>>> assignment, but which declaration should contain a fallthrough case?
>>>
>>> So shouldn't @SuppressWarnings("fallthrough") better be binded to a switch
>>> or
>>> case statement?
>>
>> In principle it would be nice to place the @SuppressWarnings right next to
>> the switch statement for which the warnings are suppressed. However, it is a
>> syntactic restriction of the Java programming language that annotations can
>> only be used as modifiers on declarations, specifically package, class,
>> method, method parameter, constructor, and local variable declarations. See
>> JLS 9.7 [1]. It is not legal to place annotations on statements. So, the
>> SuppressWarnings annotation has to be placed on a declaration that encloses
>> the switch statement in question. In this case that's the declaration of the
>> entire method.
>>
>> [1] http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.7
>>
>> It turns out that this discussion is moot, as the switch fall-through is
>> actually unnecessary! The comma case falls through to the next case, but all
>> that does is break. The warning can be eliminated simply by replacing
>> /*FALLTHROUGH*/ with a break statement. This removes the need for the
>> SuppressWarnings annotation.
>>
>> This permissions-parsing code occurs in several places around the JDK,
>> copied and slightly modified. Some of them use the string identity
>> comparison optimization, and some have this switch fall through. (We've
>> discussed this previously. See [2].) Accordingly, I've asked Dan to adjust a
>> couple of these other cases to have the same comment about string identity
>> comparisons, and to change the switch statement to avoid the fall-through
>> entirely.
>>
>> [2] http://mail.openjdk.java.net/pipermail/jdk8-dev/2011-December/000415.html
>>
>> While I'm reluctant to expand the scope of this changeset, I think it's
>> important to keep these five occurrences consistent. Obviously it would be
>> nicer to unify the five copies into one, but this is a much bigger change
>> that I think is clearly out of scope.
>>
>> Dan will issue another webrev with these changes shortly.
>>
>> s'marks
>>
>
> I have adjusted my fix with the above suggestions.
>
> The latest webrev is posted at,
> http://cr.openjdk.java.net/~dxu/7193406/webrev.05/. Thanks for your comments!
>
> -Dan