40
41 #include "stdhdrs.h"
42 #include "alloc.h"
43 #include "awt_Debug.h"
44
45 extern COLORREF DesktopColor2RGB(int colorIndex);
46
47 class AwtObject;
48 typedef AwtObject* PDATA;
49
50 #define JNI_IS_TRUE(obj) ((obj) ? JNI_TRUE : JNI_FALSE)
51
52 #define JNI_CHECK_NULL_GOTO(obj, msg, where) { \
53 if (obj == NULL) { \
54 env->ExceptionClear(); \
55 JNU_ThrowNullPointerException(env, msg); \
56 goto where; \
57 } \
58 }
59
60 #define JNI_CHECK_PEER_GOTO(peer, where) { \
61 JNI_CHECK_NULL_GOTO(peer, "peer", where); \
62 pData = JNI_GET_PDATA(peer); \
63 if (pData == NULL) { \
64 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \
65 goto where; \
66 } \
67 }
68
69 #define JNI_CHECK_NULL_RETURN(obj, msg) { \
70 if (obj == NULL) { \
71 env->ExceptionClear(); \
72 JNU_ThrowNullPointerException(env, msg); \
73 return; \
74 } \
75 }
76
77 #define JNI_CHECK_PEER_RETURN(peer) { \
78 JNI_CHECK_NULL_RETURN(peer, "peer"); \
79 pData = JNI_GET_PDATA(peer); \
80 if (pData == NULL) { \
81 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \
82 return; \
83 } \
84 }
85
86 #define JNI_CHECK_PEER_CREATION_RETURN(peer) { \
87 if (peer == NULL ) { \
88 return; \
89 } \
90 pData = JNI_GET_PDATA(peer); \
91 if (pData == NULL) { \
92 return; \
93 } \
94 }
95
96 #define JNI_CHECK_NULL_RETURN_NULL(obj, msg) { \
97 if (obj == NULL) { \
98 env->ExceptionClear(); \
99 JNU_ThrowNullPointerException(env, msg); \
100 return 0; \
101 } \
102 }
103
104 #define JNI_CHECK_NULL_RETURN_VAL(obj, msg, val) { \
105 if (obj == NULL) { \
106 env->ExceptionClear(); \
107 JNU_ThrowNullPointerException(env, msg); \
108 return val; \
109 } \
110 }
111
112 #define JNI_CHECK_PEER_RETURN_NULL(peer) { \
113 JNI_CHECK_NULL_RETURN_NULL(peer, "peer"); \
114 pData = JNI_GET_PDATA(peer); \
115 if (pData == NULL) { \
116 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \
117 return 0; \
118 } \
119 }
120
121 #define JNI_CHECK_PEER_RETURN_VAL(peer, val) { \
122 JNI_CHECK_NULL_RETURN_VAL(peer, "peer", val); \
123 pData = JNI_GET_PDATA(peer); \
124 if (pData == NULL) { \
125 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \
126 return val; \
127 } \
128 }
129
130 #define THROW_NULL_PDATA_IF_NOT_DESTROYED(peer) { \
131 jboolean destroyed = JNI_GET_DESTROYED(peer); \
132 if (destroyed != JNI_TRUE) { \
133 env->ExceptionClear(); \
134 JNU_ThrowNullPointerException(env, "null pData"); \
135 } \
136 }
137
138 #define JNI_GET_PDATA(peer) (PDATA) env->GetLongField(peer, AwtObject::pDataID)
139 #define JNI_GET_DESTROYED(peer) env->GetBooleanField(peer, AwtObject::destroyedID)
140
|
40
41 #include "stdhdrs.h"
42 #include "alloc.h"
43 #include "awt_Debug.h"
44
45 extern COLORREF DesktopColor2RGB(int colorIndex);
46
47 class AwtObject;
48 typedef AwtObject* PDATA;
49
50 #define JNI_IS_TRUE(obj) ((obj) ? JNI_TRUE : JNI_FALSE)
51
52 #define JNI_CHECK_NULL_GOTO(obj, msg, where) { \
53 if (obj == NULL) { \
54 env->ExceptionClear(); \
55 JNU_ThrowNullPointerException(env, msg); \
56 goto where; \
57 } \
58 }
59
60 #define JNI_CHECK_NULL_RETURN(obj, msg) { \
61 if (obj == NULL) { \
62 env->ExceptionClear(); \
63 JNU_ThrowNullPointerException(env, msg); \
64 return; \
65 } \
66 }
67
68 #define JNI_CHECK_PEER_CREATION_RETURN(peer) { \
69 if (peer == NULL ) { \
70 return; \
71 } \
72 pData = JNI_GET_PDATA(peer); \
73 if (pData == NULL) { \
74 return; \
75 } \
76 }
77
78 #define JNI_CHECK_NULL_RETURN_NULL(obj, msg) { \
79 if (obj == NULL) { \
80 env->ExceptionClear(); \
81 JNU_ThrowNullPointerException(env, msg); \
82 return 0; \
83 } \
84 }
85
86 #define JNI_CHECK_NULL_RETURN_VAL(obj, msg, val) { \
87 if (obj == NULL) { \
88 env->ExceptionClear(); \
89 JNU_ThrowNullPointerException(env, msg); \
90 return val; \
91 } \
92 }
93
94 /**
95 * This macros must be used under SyncCall or on the Toolkit thread.
96 */
97 #define JNI_CHECK_PEER_GOTO(peer, where) { \
98 JNI_CHECK_NULL_GOTO(peer, "peer", where); \
99 pData = JNI_GET_PDATA(peer); \
100 if (pData == NULL) { \
101 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \
102 goto where; \
103 } \
104 }
105
106 /**
107 * This macros must be used under SyncCall or on the Toolkit thread.
108 */
109 #define JNI_CHECK_PEER_RETURN(peer) { \
110 JNI_CHECK_NULL_RETURN(peer, "peer"); \
111 pData = JNI_GET_PDATA(peer); \
112 if (pData == NULL) { \
113 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \
114 return; \
115 } \
116 }
117
118 /**
119 * This macros must be used under SyncCall or on the Toolkit thread.
120 */
121 #define JNI_CHECK_PEER_RETURN_NULL(peer) { \
122 JNI_CHECK_NULL_RETURN_NULL(peer, "peer"); \
123 pData = JNI_GET_PDATA(peer); \
124 if (pData == NULL) { \
125 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \
126 return 0; \
127 } \
128 }
129
130 /**
131 * This macros must be used under SyncCall or on the Toolkit thread.
132 */
133 #define JNI_CHECK_PEER_RETURN_VAL(peer, val) { \
134 JNI_CHECK_NULL_RETURN_VAL(peer, "peer", val); \
135 pData = JNI_GET_PDATA(peer); \
136 if (pData == NULL) { \
137 THROW_NULL_PDATA_IF_NOT_DESTROYED(peer); \
138 return val; \
139 } \
140 }
141
142 #define THROW_NULL_PDATA_IF_NOT_DESTROYED(peer) { \
143 jboolean destroyed = JNI_GET_DESTROYED(peer); \
144 if (destroyed != JNI_TRUE) { \
145 env->ExceptionClear(); \
146 JNU_ThrowNullPointerException(env, "null pData"); \
147 } \
148 }
149
150 #define JNI_GET_PDATA(peer) (PDATA) env->GetLongField(peer, AwtObject::pDataID)
151 #define JNI_GET_DESTROYED(peer) env->GetBooleanField(peer, AwtObject::destroyedID)
152
|