how to tell 2 methods are override-equivalent
Hamlin Li
huaming.li at oracle.com
Fri Mar 24 09:21:02 UTC 2017
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)?
Thank you
-Hamlin
>
> 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/ee4b8d32/attachment-0001.html>
More information about the compiler-dev
mailing list