how to tell 2 methods are override-equivalent
Hamlin Li
huaming.li at oracle.com
Wed Mar 22 08:57:36 UTC 2017
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.
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/20170322/18ddc24e/attachment.html>
More information about the compiler-dev
mailing list