RFR [9] 8141615: Add new public methods to sun.reflect.ConstantPool

Konstantin Shefov konstantin.shefov at oracle.com
Mon Jan 11 13:34:10 UTC 2016


Kindly reminder.

Already approved by C. Thalinger and I. Ignatyev.

Thanks
-Konstantin

On 12/17/2015 11:26 AM, Konstantin Shefov wrote:
> Hi Coleen
>
> You have previously reviewed this enhancement and made a few comments
> I have resolved them, so could you look at the webrevs again, please?
>
> I have added tests, removed cp tags that are not in JVM spec (100 - 
> 105) and made some other changes.
>
> JDK: http://cr.openjdk.java.net/~kshefov/8141615/jdk/webrev.04
> HOTSPOT: http://cr.openjdk.java.net/~kshefov/8141615/hotspot/webrev.02
>
> Thanks
> -Konstantin
>
>
> On 12/16/2015 07:42 PM, Christian Thalinger wrote:
>> Looks good.  Thanks.
>>
>>> On Dec 16, 2015, at 1:13 AM, Konstantin Shefov 
>>> <konstantin.shefov at oracle.com> wrote:
>>>
>>> Christian
>>>
>>> I have fixed the enum so it uses "ENUMENTRY(int)" format now and 
>>> does linear search.
>>> http://cr.openjdk.java.net/~kshefov/8141615/jdk/webrev.04/
>>>
>>> -Konstantin
>>>
>>> On 12/15/2015 08:36 PM, Christian Thalinger wrote:
>>>>> On Dec 14, 2015, at 11:11 PM, Konstantin Shefov 
>>>>> <konstantin.shefov at oracle.com 
>>>>> <mailto:konstantin.shefov at oracle.com>> wrote:
>>>>>
>>>>> Hi Christian
>>>>>
>>>>> Thanks for reviewing, I have changed indents as you asked:
>>>>>
>>>>> http://cr.openjdk.java.net/~kshefov/8141615/jdk/webrev.03 
>>>>> <http://cr.openjdk.java.net/%7Ekshefov/8141615/jdk/webrev.03>
>>>> Thanks.  I’m still not comfortable with the enum.  It would be 
>>>> great if we could get the values from the VM like in JVMCI:
>>>>
>>>> http://hg.openjdk.java.net/jdk9/hs-comp/hotspot/file/c036c7f17e09/src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java#l101 
>>>>
>>>>
>>>> but that would be overkill here.  But I would like to see the enum 
>>>> entries take the integer values as arguments, like here:
>>>>
>>>> http://hg.openjdk.java.net/jdk9/hs-comp/hotspot/file/c036c7f17e09/src/jdk.vm.ci/share/classes/jdk.vm.ci.sparc/src/jdk/vm/ci/sparc/SPARCKind.java#l27 
>>>>
>>>>
>>>> and either do a simple linear search to find the entry or build up 
>>>> a table like the HotSpotConstantPool example above.
>>>>
>>>>> -Konstantin
>>>>>
>>>>> On 12/15/2015 06:23 AM, Christian Thalinger wrote:
>>>>>>> On Dec 11, 2015, at 1:54 AM, Konstantin Shefov 
>>>>>>> <konstantin.shefov at oracle.com 
>>>>>>> <mailto:konstantin.shefov at oracle.com>> wrote:
>>>>>>>
>>>>>>> Hello
>>>>>>>
>>>>>>> Please review the new version on the patch.
>>>>>>>
>>>>>>> New webrev:
>>>>>>> Webrev hotspot: 
>>>>>>> http://cr.openjdk.java.net/~kshefov/8141615/hotspot/webrev.02 
>>>>>>> <http://cr.openjdk.java.net/%7Ekshefov/8141615/hotspot/webrev.02>
>>>>>>> Webrev jdk: 
>>>>>>> http://cr.openjdk.java.net/~kshefov/8141615/jdk/webrev.02 
>>>>>>> <http://cr.openjdk.java.net/%7Ekshefov/8141615/jdk/webrev.02>
>>>>>> These newlines look ridiculous especially when it’s not even needed:
>>>>>>
>>>>>> +  // Returns a class reference index for a method or a field.
>>>>>> +  public int      getClassRefIndexAt
>>>>>> +                                     (int index) { return 
>>>>>> getClassRefIndexAt0 (constantPoolOop, index); }
>>>>>>
>>>>>> Either fix the indent or just add them like regular methods 
>>>>>> should look like.
>>>>>>
>>>>>>> What has been changed:
>>>>>>> 1. Added tests for the new added methods.
>>>>>>> 2. Removed CP tag codes 100 - 105 from being passed to java and 
>>>>>>> left only codes from the open JVM spec 
>>>>>>> (https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.4-140).
>>>>>>>
>>>>>>> Thanks
>>>>>>> -Konstantin
>>>>>>>
>>>>>>> On 11/27/2015 07:48 PM, Konstantin Shefov wrote:
>>>>>>>> Coleen,
>>>>>>>> Thanks for review
>>>>>>>>
>>>>>>>> On 11/24/2015 07:33 PM, Coleen Phillimore wrote:
>>>>>>>>> I have a couple preliminary comments.  First, there are no 
>>>>>>>>> tests added with all this new functionality.  Tests should be 
>>>>>>>>> added with the functionality changeset, not promised afterward.
>>>>>>>> I will add tests.
>>>>>>>>> Secondly, I do not like that JDK code knows the implementation 
>>>>>>>>> details of the JVM's constant pool tags.  These should be only 
>>>>>>>>> for internal use.
>>>>>>>> The package "sun.reflect" is for internal use only, so it 
>>>>>>>> shouldn’t be a problem.
>>>>>>>>> My third comment is that I haven't looked carefully at this 
>>>>>>>>> constant pool implementation but it seems very unsafe if the 
>>>>>>>>> class is redefined and relies on an implementation detail in 
>>>>>>>>> the JVM that can change.   I will have more comments once I 
>>>>>>>>> look more at the jvmti specification.
>>>>>>>>>
>>>>>>>>> thanks,
>>>>>>>>> Coleen
>>>>>>>>>
>>>>>>>>> On 11/24/15 9:48 AM, Konstantin Shefov wrote:
>>>>>>>>>> Hello
>>>>>>>>>>
>>>>>>>>>> Please, review modified webrev.
>>>>>>>>>>
>>>>>>>>>> I have added methods
>>>>>>>>>> getNameAndTypeRefIndexAt(int index) - to get name and type 
>>>>>>>>>> entry index from a method, field or indy entry index;
>>>>>>>>>> getClassRefIndexAt(int index) - to get class entry index from 
>>>>>>>>>> a method or field entry index;
>>>>>>>>>>
>>>>>>>>>> I removed previously added method
>>>>>>>>>> getInvokedynamicRefInfoAt(int index) - as it is no more 
>>>>>>>>>> needed now.
>>>>>>>>>>
>>>>>>>>>> New webrev:
>>>>>>>>>> Webrev hotspot: 
>>>>>>>>>> http://cr.openjdk.java.net/~kshefov/8141615/hotspot/webrev.01 
>>>>>>>>>> <http://cr.openjdk.java.net/%7Ekshefov/8141615/hotspot/webrev.01> 
>>>>>>>>>>
>>>>>>>>>> Webrev jdk: 
>>>>>>>>>> http://cr.openjdk.java.net/~kshefov/8141615/jdk/webrev.01 
>>>>>>>>>> <http://cr.openjdk.java.net/%7Ekshefov/8141615/jdk/webrev.01>
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>> -Konstantin
>>>>>>>>>>
>>>>>>>>>> On 11/18/2015 02:11 PM, Konstantin Shefov wrote:
>>>>>>>>>>> Remi,
>>>>>>>>>>>
>>>>>>>>>>> Thanks for reviewing. Your suggestion sounds sensibly.
>>>>>>>>>>> May be it also has sense to make a method 
>>>>>>>>>>> "getMethodRefNameAndTypeIndex(int index)" to acquire 
>>>>>>>>>>> name-and-type entry index for methods also.
>>>>>>>>>>>
>>>>>>>>>>> -Konstantin
>>>>>>>>>>>
>>>>>>>>>>> On 11/18/2015 12:04 AM, Remi Forax wrote:
>>>>>>>>>>>> Hi Konstantin,
>>>>>>>>>>>> Technically, getInvokedynamicRefInfoAt should be 
>>>>>>>>>>>> getNameAndTypeOfInvokedynamicRefInfoAt because it only 
>>>>>>>>>>>> extract the nameAndType value of the InvokeDynamicRef.
>>>>>>>>>>>>
>>>>>>>>>>>> In term of API, I think it's better to decompose the API, 
>>>>>>>>>>>> i.e. to have a method
>>>>>>>>>>>>   int getInvokedynamicRefNameAndTypeIndex(int index)
>>>>>>>>>>>> that returns the nameAndType index and to reuse 
>>>>>>>>>>>> getNameAndTypeRefInfoAt(index) to get the corresponding 
>>>>>>>>>>>> array of Strings.
>>>>>>>>>>>>
>>>>>>>>>>>> cheers,
>>>>>>>>>>>> Rémi
>>>>>>>>>>>>
>>>>>>>>>>>> ----- Mail original -----
>>>>>>>>>>>>> De: "Christian Thalinger" <christian.thalinger at oracle.com 
>>>>>>>>>>>>> <mailto:christian.thalinger at oracle.com>>
>>>>>>>>>>>>> À: "Konstantin Shefov" <konstantin.shefov at oracle.com>
>>>>>>>>>>>>> Cc: "hotspot-dev developers" 
>>>>>>>>>>>>> <hotspot-dev at openjdk.java.net>, 
>>>>>>>>>>>>> core-libs-dev at openjdk.java.net 
>>>>>>>>>>>>> <mailto:core-libs-dev at openjdk.java.net>
>>>>>>>>>>>>> Envoyé: Lundi 16 Novembre 2015 23:41:45
>>>>>>>>>>>>> Objet: Re: RFR [9] 8141615: Add new public methods to 
>>>>>>>>>>>>> sun.reflect.ConstantPool
>>>>>>>>>>>>>
>>>>>>>>>>>>> [CC'ing core-libs-dev]
>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Nov 13, 2015, at 4:55 AM, Konstantin Shefov
>>>>>>>>>>>>>> <konstantin.shefov at oracle.com 
>>>>>>>>>>>>>> <mailto:konstantin.shefov at oracle.com>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hello
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Please review an enhancement to add three new methods to
>>>>>>>>>>>>>> sun.reflect.ConstantPool class.
>>>>>>>>>>>>>> The following methods are suggested:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> public String[] getNameAndTypeRefInfoAt(int index) - 
>>>>>>>>>>>>>> returns string
>>>>>>>>>>>>>> representation of name and type from a NameAndType 
>>>>>>>>>>>>>> constant pool entry
>>>>>>>>>>>>>> with the specified index
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> public String[] getInvokedynamicRefInfoAt(int index) - 
>>>>>>>>>>>>>> returns string
>>>>>>>>>>>>>> representation of name and type from an InvokeDynamic 
>>>>>>>>>>>>>> constant pool entry
>>>>>>>>>>>>>> with the specified index
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> public Tag getTagAt(int index) - returns a Tag enum 
>>>>>>>>>>>>>> instance of a constant
>>>>>>>>>>>>>> pool entry with the specified index
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> These three methods could be used for testing API working 
>>>>>>>>>>>>>> with constant
>>>>>>>>>>>>>> pool, e.g. JVMCI.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8141615
>>>>>>>>>>>>>> Webrev hotspot:
>>>>>>>>>>>>>> http://cr.openjdk.java.net/~kshefov/8141615/hotspot/webrev.00 
>>>>>>>>>>>>>> <http://cr.openjdk.java.net/%7Ekshefov/8141615/hotspot/webrev.00> 
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Webrev jdk: 
>>>>>>>>>>>>>> http://cr.openjdk.java.net/~kshefov/8141615/jdk/webrev.00
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>> -Konstantin
>




More information about the core-libs-dev mailing list