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