<AWT Dev> [9] Review request: new macro for conversion to jboolean

roger riggs roger.riggs at oracle.com
Fri Mar 21 15:10:16 UTC 2014


Hi Sergey,

I didn't see any examples of the use case in this thread.  The proposed 
name seems bulky and clumsy.

In the snippet provided, it did not seem necessary to force the cast to 
jboolean.
Both JNI_TRUE and JNI_FALSE are untyped constants.

The macro would just as useful (if I understand the cases) without the cast.

How useful is a simple definition as:

#define IS_TRUE(obj) ((obj) ? JNI_TRUE : JNI_FALSE)

then it would look ok to see these in sources:

       return IS_TRUE(obj);

       if (IS_TRUE(obj)) {....}

       jboolean ret = IS_TRUE(obj);

The general purpose usage matches the general C conventions for
true and false and match the JNI semantics.

Roger



On 3/19/2014 7:43 PM, Sergey Bylokhov wrote:
> Thanks.
> So if nobody objects, the final version will be:
>
> #define IS_NULL(obj) ((obj) == NULL)
> #define JNU_IsNull(env,obj) ((obj) == NULL)
> +#define TO_JBOOLEAN(obj) (jboolean) ((obj) ? JNI_TRUE : JNI_FALSE)
>
>
> On 3/20/14 12:07 AM, roger riggs wrote:
>> Hi,
>>
>> Well...  When JNU_RETURN was added, there was a long discussion about
>> NOT using JNU unless the JNI environment was an argument to the macro.
>>
>> So, the simple name is preferred.
>>
>> Roger
>>
>> On 3/19/2014 4:08 PM, Phil Race wrote:
>>> PS .. so maybe whilst you are touching this file you could do
>>> #define JNU_CHECK_NULL CHECK_NULL
>>> #define JNU_CHECK_NULL_RETURN CHECK_NULL_RETURN
>>>
>>> so we could migrate to these (clearer) ones
>>>
>>> -phil.
>>>
>>> On 3/19/2014 1:05 PM, Phil Race wrote:
>>>> I think having it start with "JNU_" is a good suggestion.
>>>> I've been wondering over the last week or so if it would not have been
>>>> better to have CHECK_NULL called JNU_CHECK_NULL to reduce collision 
>>>> chances
>>>> and to make it clearer where it comes from ..
>>>>
>>>> -phil.
>>>>
>>>> On 3/19/2014 12:49 PM, Mike Duigou wrote:
>>>>> Definitely a useful macro.
>>>>>
>>>>> I too would prefer a name like TO_JBOOLEAN since it reveals the 
>>>>> result type. Also all uppercase to identify it as a macro. If we 
>>>>> are paranoid and want to reduce the chance of a name collision 
>>>>> then JNU_TO_JBOOLEAN perhaps.
>>>>>
>>>>> I would also define the macro as:
>>>>>
>>>>> #define JNU_TO_JBOOLEAN(obj) (jboolean) ((obj) ? JNI_TRUE : 
>>>>> JNI_FALSE)
>>>>>
>>>>> so that the type of the result is explicit. Unfortunately jni.h 
>>>>> doesn't define JNI_TRUE or false with a cast to jboolean as they 
>>>>> probably should.
>>>>>
>>>>> Mike
>>>>>
>>>>> On Mar 19 2014, at 11:36 , Sergey Bylokhov 
>>>>> <sergey.bylokhov at oracle.com> wrote:
>>>>>
>>>>>> Thanks Anthony!
>>>>>>
>>>>>> Can somebody from the core-libs team take a look?
>>>>>>
>>>>>> On 3/17/14 10:31 PM, Anthony Petrov wrote:
>>>>>>> Personally, I'd call it to_jboolean(obj), but IS_TRUE(obj) 
>>>>>>> sounds good to me too. Either way, I'm fine with the fix.
>>>>>>>
>>>>>>> -- 
>>>>>>> best regards,
>>>>>>> Anthony
>>>>>>>
>>>>>>> On 3/17/2014 7:01 PM, Sergey Bylokhov wrote:
>>>>>>>> Hello.
>>>>>>>> This review request is for the new macro, which simplify 
>>>>>>>> conversion to
>>>>>>>> jboolean. It will be useful for fixing parfait warnings.
>>>>>>>>
>>>>>>>> We have a lot of places, where we cast some type to jboolean:
>>>>>>>>
>>>>>>>> BOOL = retVal;
>>>>>>>> return (jboolean) retVal;
>>>>>>>>
>>>>>>>> WARNING: Expecting value of JNI primitive type jboolean: 
>>>>>>>> mismatched
>>>>>>>> value retVal with size 32 bits, retVal used for conversion to 
>>>>>>>> int8 in return
>>>>>>>>
>>>>>>>>
>>>>>>>> +++ b/src/share/native/common/jni_util.h    Mon Mar 17 18:28:48 
>>>>>>>> 2014 +0400
>>>>>>>> @@ -277,6 +277,7 @@
>>>>>>>>
>>>>>>>>   #define IS_NULL(obj) ((obj) == NULL)
>>>>>>>>   #define JNU_IsNull(env,obj) ((obj) == NULL)
>>>>>>>> +#define IS_TRUE(obj) ((obj) ? JNI_TRUE : JNI_FALSE)
>>>>>>>>
>>>>>>>> I am not sure about the name, probably someone have a better 
>>>>>>>> suggestion?
>>>>>>>>
>>>>>>>> The fix is for jdk9/dev.
>>>>>>>>
>>>>>>>> -- 
>>>>>>>> Best regards, Sergey.
>>>>>>>>
>>>>>>
>>>>>> -- 
>>>>>> Best regards, Sergey.
>>>>>>
>>>>
>>>
>>
>
>




More information about the core-libs-dev mailing list