how to tell 2 methods are override-equivalent
Hamlin Li
huaming.li at oracle.com
Mon Mar 20 02:13:28 UTC 2017
Hi Vicente,
Thank you for responding, please check the comments inline.
On 2017/3/17 21:08, Vicente Romero wrote:
> Hi Hamlin,
>
> How do you obtain m2? I mean at some point it should have been
> obtained from an executable element or similar.
I have a java doclet which scans jdk versions iteratively, m2 was got in
previous round of run of the tool , then it's stored in a file (for
example when scan jdk 1.8 source code), then parsed and retrieved from
the file again (for example when scan jdk 9 source code).
> In the worst case you can always generate a simple test case and try
> to compile it for example:
>
> class Test {
> void getContent(java.lang.Class<?>[] c) {}
> void getContent(java.lang.Class[] c) {}
> }
>
> this one will fail saying that both methods have the same erasure,
Yes, it should fail.
In my situation, "getContent(java.lang.Class[] c) {}" is the code in jdk
1.8, "getContent(java.lang.Class<?>[] c) {}" is the corresponding code
in jdk 9. When I scan jdk 9 source code, I need to tell that
getContent(java.lang.Class<?>[] c) and getContent(java.lang.Class[] c)
are in fact the same method, rather than 2 different methods.
Thank you
-Hamlin
>
> HTH,
> Vicente
>
> On 03/16/2017 11:15 PM, Hamlin Li wrote:
>>
>> Hi,
>>
>> ( I'm not sure if this is the right alias to ask the question, please
>> help forward if necessary. )
>>
>> I have a question about telling whether one method is subsignature of
>> another one. My situation is,
>>
>> 1. there is a TypeElement *t1 *which represents java.net.URL, and a
>> ExecutableElement *m1* which represents
>> getContent(java.lang.Class*<?>*[]),
>>
>> 2. there is a String *t2* which is "java.net.URL", and another String
>> *m2 *which is "getContent(java.lang.Class[])".
>>
>> The difference between m1 and m2 is that, m1 is an instance of
>> ExecutableElement, m2 is an instance of String; there is a wildcard
>> type argument in m1.
>>
>>
>> Is there a way to tell whether m1 and m2 are override-equivalent, m2
>> is subsignature of m1?
>>
>> I suppose I should use
>> javax.lang.model.util.Types.isSubsignature(ExecutableType m1,
>> ExecutableType m2), but I don't know how can I convert
>> ExecutableElement *m1* and String *m2* to**ExecutableType.
>>
>> Or I'm in wrong direction?
>>
>>
>> Thank you
>>
>> -Hamlin
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20170320/fc70064b/attachment-0001.html>
More information about the compiler-dev
mailing list