how to tell 2 methods are override-equivalent

Vicente Romero vicente.romero at oracle.com
Fri Mar 24 13:08:01 UTC 2017



On 03/24/2017 05:21 AM, Hamlin Li wrote:
>
>
>
> On 2017/3/22 22:01, Vicente Romero wrote:
>> Hi Hamlin
>>
>> On 03/22/2017 04:57 AM, Hamlin Li wrote:
>>>
>>> On 2017/3/22 8:50, Jonathan Gibbons wrote:
>>>> Hamlin,
>>>>
>>>> Note that while it is relative easy to convert a string containing 
>>>> a type name (such as "java.net.URL") to an Element and/or 
>>>> TypeMirror, in general it will not be possible to convert a string 
>>>> like "getContent(java.lang.Class[])" to a Element or TypeMirror, 
>>>> because the string as written does not contain sufficient information.
>>>>
>>>> Even if you did provide more info, you would still have to be 
>>>> careful to evaluate the string in the same compilation context as 
>>>> that to which you are comparing it, for the comparison to have any 
>>>> chance of succeeding. 
>>> Hi Jon,
>>>
>>> Thank you for explanation.
>>>> Given your other message mentioning a doclet, you are effectively 
>>>> asking to be able to compile fragments of code (i.e. strings) in 
>>>> the context of your doclet, and that is not possible with the 
>>>> existing public API.
>>> Although it's bad news to me, it saves my time from continuing work 
>>> in this direction. :-)
>>> I will try to find some workaround solve the issue.
>>
>> If you have access to the method's descriptor, I believe that you 
>> could use it to convert from the method descriptor to the types you 
>> need for your comparison, please let me know if you want to explore 
>> that option,
> Hi Vicente,
>
> I'd like to try your option. But sorry, I'm a little bit confused, do 
> you mean if I have a string representing the method's descriptor then 
> the method descriptor can be converted into a valid ExecutableElement 
> instance which can be used to compare with another one by 
> Elements.overrides(ExecutableElement, ExecutableElement, TypeElement)?

correct that's what I meant,

>
> Thank you
> -Hamlin

Vicente

>>
>> Vicente
>>
>>>
>>> Thank you
>>> -Hamlin
>>>> -- Jon
>>>>
>>>> On 03/21/2017 02:28 PM, Jonathan Gibbons wrote:
>>>>>
>>>>> Hamlin,
>>>>>
>>>>> Use Element.asType() to move from the Element world to the 
>>>>> TypeMirror world.
>>>>> http://download.java.net/java/jdk9/docs/api/javax/lang/model/element/Element.html#asType--
>>>>>
>>>>> Use Types.asElement(TypeMirror) to go in the reverse direction, 
>>>>> from a TypeMirror to an Element.
>>>>> http://download.java.net/java/jdk9/docs/api/javax/lang/model/util/Types.html#asElement-javax.lang.model.type.TypeMirror-
>>>>> but note the reverse direction is lossy and may throw exceptions:
>>>>>     e.g. for type "int", there is no direct element equivalent;  
>>>>> for type List<String>, the element will be the declaration List<T>
>>>>>
>>>>> -- Jon
>>>>>
>>>>> On 3/16/17 8: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/20170324/e1472eef/attachment.html>


More information about the compiler-dev mailing list