RFR[9]: 8147585: Annotations with lambda expressions has parameters result in wrong behavior.
Joseph D. Darcy
joe.darcy at oracle.com
Tue Jun 7 00:30:38 UTC 2016
Hello,
The test
45 void testAnnotationWithLambda() {
46 Method[] methods =
AnnotationWithLambda.MethodsWithAnnotations.class.getDeclaredMethods();
47 for (Method method : methods) {
48 assertEquals(1, method.getDeclaredAnnotations().length);
49 }
50 }
is very non-specific in what it is testing. A better test would include
something like
method.isAnnotationPresent(@LambdaWithParameter) &&
method.isAnnotationPresent(@LambdaWithouParameter)
if both annotations were put on the same method.
Cheers,
-Joe
On 6/6/2016 12:20 AM, shilpi.rastogi at oracle.com wrote:
> Gentle reminder!!
>
> On 6/3/2016 11:40 AM, shilpi.rastogi at oracle.com wrote:
>> Thanks Vladimir and Joel!!
>> Please see http://cr.openjdk.java.net/~srastogi/8147585/webrev.04/
>> Added restriction for synthetic methods as well.
>>
>> On 6/2/2016 5:04 PM, Vladimir Ivanov wrote:
>>>
>>>
>>> On 6/2/16 12:02 AM, Joel Borggrén-Franck wrote:
>>>> Hi,
>>>>
>>>> I think this was caught by the verifier before 8 since you couldn't
>>>> have
>>>> concrete or private methods in an interface. Now you can (though
>>>> not in
>>>> Java for private ones).
>>>>
>>>> My spider sense tells me there might be something lurking here (though
>>>> it was a while since this was in my L1 cache). It is not likely,
>>>> but I'm
>>>> not 100% sure that it is impossible to make javac produce a bridge
>>>> when
>>>> compiling an annotation type for example, so why not remove synthetic
>>>> methods as well?
>>>
>>> I'm not an expert in annotation processing, but it bothers me as
>>> well, since current behavior looks too Java-centric. There are valid
>>> (in JVMS sense) class files which are not produced by javac or from
>>> java source file.
>>>
>>> What is expected behavior in such case? It is unfortunate when
>>> non-Java languages have to obey to Java rules. It reminds me a
>>> problem with Class.getSimpleName() (see JDK-8057919 [1]) we fixed
>>> some time ago.
>>> Best regards,
>>> Vladimir Ivanov
>>>
>>> [1] https://bugs.openjdk.java.net/browse/JDK-8057919
>>>
>>>>
>>>> Spending some time with ASM to do a bunch of tests not compilable in
>>>> java might be useful, there should also be some frameworks in
>>>> langtools
>>>> to produce invalid classfiles IIRC.
>> Raised https://bugs.openjdk.java.net/browse/JDK-8158510 to include
>> new test cases.
>>
>> Regards,
>> Shilpi
>>>>
>>>> cheers
>>>> /Joel
>>>>
>>>> On Tue, 31 May 2016 at 17:49 shilpi.rastogi at oracle.com
>>>> <mailto:shilpi.rastogi at oracle.com> <shilpi.rastogi at oracle.com
>>>> <mailto:shilpi.rastogi at oracle.com>> wrote:
>>>>
>>>> Thanks Paul!!
>>>> Please see http://cr.openjdk.java.net/~srastogi/8147585/webrev.03/
>>>>
>>>> Thanks,
>>>> Shilpi
>>>>
>>>> On 5/31/2016 7:57 PM, Paul Sandoz wrote:
>>>> > >"Returns an array containing Method objects reflecting all the
>>>> declared methods of the class or interface represented by this
>>>> Class
>>>> object, including public, protected, default (package) access, and
>>>> private methods, but excluding inherited methods."
>>>>
>>
>
More information about the core-libs-dev
mailing list