| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2017 eyeo GmbH | 3 * Copyright (C) 2006-2017 eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 40 | 40 |
| 41 jclass GetJsValueClass() | 41 jclass GetJsValueClass() |
| 42 { | 42 { |
| 43 return (jsValueClass != NULL ? jsValueClass->Get() : NULL); | 43 return (jsValueClass != NULL ? jsValueClass->Get() : NULL); |
| 44 } | 44 } |
| 45 | 45 |
| 46 static jboolean JNICALL JniIsUndefined(JNIEnv* env, jclass clazz, jlong ptr) | 46 static jboolean JNICALL JniIsUndefined(JNIEnv* env, jclass clazz, jlong ptr) |
| 47 { | 47 { |
| 48 try | 48 try |
| 49 { | 49 { |
| 50 return JniGetJsValue(ptr)->IsUndefined() ? JNI_TRUE : JNI_FALSE; | 50 return JniGetJsValuePtr(ptr)->IsUndefined() ? JNI_TRUE : JNI_FALSE; |
| 51 } | 51 } |
| 52 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 52 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 53 } | 53 } |
| 54 | 54 |
| 55 static jboolean JNICALL JniIsNull(JNIEnv* env, jclass clazz, jlong ptr) | 55 static jboolean JNICALL JniIsNull(JNIEnv* env, jclass clazz, jlong ptr) |
| 56 { | 56 { |
| 57 try | 57 try |
| 58 { | 58 { |
| 59 return JniGetJsValue(ptr)->IsNull() ? JNI_TRUE : JNI_FALSE; | 59 return JniGetJsValuePtr(ptr)->IsNull() ? JNI_TRUE : JNI_FALSE; |
| 60 } | 60 } |
| 61 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 61 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 62 } | 62 } |
| 63 | 63 |
| 64 static jboolean JNICALL JniIsNumber(JNIEnv* env, jclass clazz, jlong ptr) | 64 static jboolean JNICALL JniIsNumber(JNIEnv* env, jclass clazz, jlong ptr) |
| 65 { | 65 { |
| 66 try | 66 try |
| 67 { | 67 { |
| 68 return JniGetJsValue(ptr)->IsNumber() ? JNI_TRUE : JNI_FALSE; | 68 return JniGetJsValuePtr(ptr)->IsNumber() ? JNI_TRUE : JNI_FALSE; |
| 69 } | 69 } |
| 70 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 70 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 71 } | 71 } |
| 72 | 72 |
| 73 static jboolean JNICALL JniIsString(JNIEnv* env, jclass clazz, jlong ptr) | 73 static jboolean JNICALL JniIsString(JNIEnv* env, jclass clazz, jlong ptr) |
| 74 { | 74 { |
| 75 try | 75 try |
| 76 { | 76 { |
| 77 return JniGetJsValue(ptr)->IsString() ? JNI_TRUE : JNI_FALSE; | 77 return JniGetJsValuePtr(ptr)->IsString() ? JNI_TRUE : JNI_FALSE; |
| 78 } | 78 } |
| 79 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 79 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 80 } | 80 } |
| 81 | 81 |
| 82 static jboolean JNICALL JniIsBoolean(JNIEnv* env, jclass clazz, jlong ptr) | 82 static jboolean JNICALL JniIsBoolean(JNIEnv* env, jclass clazz, jlong ptr) |
| 83 { | 83 { |
| 84 try | 84 try |
| 85 { | 85 { |
| 86 return JniGetJsValue(ptr)->IsBool() ? JNI_TRUE : JNI_FALSE; | 86 return JniGetJsValuePtr(ptr)->IsBool() ? JNI_TRUE : JNI_FALSE; |
| 87 } | 87 } |
| 88 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 88 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 89 } | 89 } |
| 90 | 90 |
| 91 static jboolean JNICALL JniIsObject(JNIEnv* env, jclass clazz, jlong ptr) | 91 static jboolean JNICALL JniIsObject(JNIEnv* env, jclass clazz, jlong ptr) |
| 92 { | 92 { |
| 93 try | 93 try |
| 94 { | 94 { |
| 95 return JniGetJsValue(ptr)->IsObject() ? JNI_TRUE : JNI_FALSE; | 95 return JniGetJsValuePtr(ptr)->IsObject() ? JNI_TRUE : JNI_FALSE; |
| 96 } | 96 } |
| 97 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 97 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 98 } | 98 } |
| 99 | 99 |
| 100 static jboolean JNICALL JniIsArray(JNIEnv* env, jclass clazz, jlong ptr) | 100 static jboolean JNICALL JniIsArray(JNIEnv* env, jclass clazz, jlong ptr) |
| 101 { | 101 { |
| 102 try | 102 try |
| 103 { | 103 { |
| 104 return JniGetJsValue(ptr)->IsArray() ? JNI_TRUE : JNI_FALSE; | 104 return JniGetJsValuePtr(ptr)->IsArray() ? JNI_TRUE : JNI_FALSE; |
| 105 } | 105 } |
| 106 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 106 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 107 } | 107 } |
| 108 | 108 |
| 109 static jboolean JNICALL JniIsFunction(JNIEnv* env, jclass clazz, jlong ptr) | 109 static jboolean JNICALL JniIsFunction(JNIEnv* env, jclass clazz, jlong ptr) |
| 110 { | 110 { |
| 111 try | 111 try |
| 112 { | 112 { |
| 113 return JniGetJsValue(ptr)->IsFunction() ? JNI_TRUE : JNI_FALSE; | 113 return JniGetJsValuePtr(ptr)->IsFunction() ? JNI_TRUE : JNI_FALSE; |
| 114 } | 114 } |
| 115 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 115 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 116 } | 116 } |
| 117 | 117 |
| 118 static jstring JNICALL JniAsString(JNIEnv* env, jclass clazz, jlong ptr) | 118 static jstring JNICALL JniAsString(JNIEnv* env, jclass clazz, jlong ptr) |
| 119 { | 119 { |
| 120 try | 120 try |
| 121 { | 121 { |
| 122 return env->NewStringUTF(JniGetJsValue(ptr)->AsString().c_str()); | 122 AdblockPlus::JsValue* jsValue = JniGetJsValuePtr(ptr); |
| 123 return env->NewStringUTF(jsValue->AsString().c_str()); | |
| 123 } | 124 } |
| 124 CATCH_THROW_AND_RETURN(env, 0) | 125 CATCH_THROW_AND_RETURN(env, 0) |
| 125 } | 126 } |
| 126 | 127 |
| 127 static jlong JNICALL JniAsLong(JNIEnv* env, jclass clazz, jlong ptr) | 128 static jlong JNICALL JniAsLong(JNIEnv* env, jclass clazz, jlong ptr) |
| 128 { | 129 { |
| 129 try | 130 try |
| 130 { | 131 { |
| 131 return static_cast<jlong>(JniGetJsValue(ptr)->AsInt()); | 132 return static_cast<jlong>(JniGetJsValuePtr(ptr)->AsInt()); |
| 132 } | 133 } |
| 133 CATCH_THROW_AND_RETURN(env, 0) | 134 CATCH_THROW_AND_RETURN(env, 0) |
| 134 } | 135 } |
| 135 | 136 |
| 136 static jboolean JNICALL JniAsBoolean(JNIEnv* env, jclass clazz, jlong ptr) | 137 static jboolean JNICALL JniAsBoolean(JNIEnv* env, jclass clazz, jlong ptr) |
| 137 { | 138 { |
| 138 try | 139 try |
| 139 { | 140 { |
| 140 return JniGetJsValue(ptr)->AsBool() ? JNI_TRUE : JNI_FALSE; | 141 return JniGetJsValuePtr(ptr)->AsBool() ? JNI_TRUE : JNI_FALSE; |
| 141 } | 142 } |
| 142 CATCH_THROW_AND_RETURN(env, JNI_FALSE) | 143 CATCH_THROW_AND_RETURN(env, JNI_FALSE) |
| 143 } | 144 } |
| 144 | 145 |
| 145 static jobject JNICALL JniAsList(JNIEnv* env, jclass clazz, jlong ptr) | 146 static jobject JNICALL JniAsList(JNIEnv* env, jclass clazz, jlong ptr) |
| 146 { | 147 { |
| 147 try | 148 try |
| 148 { | 149 { |
| 149 AdblockPlus::JsValueList list = JniGetJsValue(ptr)->AsList(); | 150 AdblockPlus::JsValueList list = JniGetJsValuePtr(ptr)->AsList(); |
| 150 | 151 |
| 151 return JniJsValueListToArrayList(env, list); | 152 return JniJsValueListToArrayList(env, list); |
| 152 } | 153 } |
| 153 CATCH_THROW_AND_RETURN(env, 0) | 154 CATCH_THROW_AND_RETURN(env, 0) |
| 154 } | 155 } |
| 155 | 156 |
| 156 static jobject JNICALL JniGetProperty(JNIEnv* env, jclass clazz, jlong ptr, jstr ing name) | 157 static jobject JNICALL JniGetProperty(JNIEnv* env, jclass clazz, jlong ptr, jstr ing name) |
| 157 { | 158 { |
| 158 try | 159 try |
| 159 { | 160 { |
| 160 return NewJniJsValue(env, JniGetJsValue(ptr)->GetProperty(JniJavaToStdString (env, name))); | 161 return NewJniJsValue(env, JniGetJsValuePtr(ptr)->GetProperty(JniJavaToStdStr ing(env, name))); |
| 161 } | 162 } |
| 162 CATCH_THROW_AND_RETURN(env, 0) | 163 CATCH_THROW_AND_RETURN(env, 0) |
| 163 } | 164 } |
| 164 | 165 |
| 165 static void JNICALL JniDtor(JNIEnv* env, jclass clazz, jlong ptr) | 166 static void JNICALL JniDtor(JNIEnv* env, jclass clazz, jlong ptr) |
| 166 { | 167 { |
| 167 delete JniLongToTypePtr<AdblockPlus::JsValuePtr>(ptr); | 168 delete JniLongToTypePtr<AdblockPlus::JsValue>(ptr); |
| 168 } | 169 } |
| 169 | 170 |
| 170 jobject NewJniJsValue(JNIEnv* env, const AdblockPlus::JsValuePtr& jsValue, jclas s jsValueClassArg) | 171 jobject NewJniJsValue(JNIEnv* env, const AdblockPlus::JsValue& jsValue, jclass j sValueClassArg) |
|
sergei
2017/04/26 09:20:59
The same (see Utils) regarding r-value is here. Fo
sergei
2017/04/26 14:12:56
What about it?
| |
| 171 { | 172 { |
| 172 if (!jsValue.get()) | 173 return env->NewObject(jsValueClass->Get(), jsValueCtor, new AdblockPlus::JsVal ue(jsValue)); |
| 173 { | |
| 174 return 0; | |
| 175 } | |
| 176 | |
| 177 jlong ptr = JniPtrToLong(new AdblockPlus::JsValuePtr(jsValue)); | |
| 178 return env->NewObject(jsValueClass->Get(), jsValueCtor, ptr); | |
| 179 } | 174 } |
| 180 | 175 |
| 181 AdblockPlus::JsValue* JniGetJsValue(jlong ptr) | 176 AdblockPlus::JsValue* JniGetJsValuePtr(jlong ptr) |
| 182 { | 177 { |
| 183 return JniLongToTypePtr<AdblockPlus::JsValuePtr>(ptr)->get(); | 178 return JniLongToTypePtr<AdblockPlus::JsValue>(ptr); |
| 184 } | 179 } |
| 185 | 180 |
| 186 AdblockPlus::JsValuePtr& JniGetJsValuePtr(jlong ptr) | 181 AdblockPlus::JsValue& JniGetJsValue(jlong ptr) |
| 187 { | 182 { |
| 188 return *JniLongToTypePtr<AdblockPlus::JsValuePtr>(ptr); | 183 return *JniLongToTypePtr<AdblockPlus::JsValue>(ptr); |
| 189 } | 184 } |
| 190 | 185 |
| 191 jobject JniJsValueListToArrayList(JNIEnv* env, AdblockPlus::JsValueList& list) | 186 jobject JniJsValueListToArrayList(JNIEnv* env, const AdblockPlus::JsValueList& l ist) |
|
sergei
2017/04/26 09:21:00
Here it would be also better to use `JsValueList&
sergei
2017/04/26 14:12:56
What about it?
anton
2017/04/27 06:21:00
Acknowledged. Now moving in NewJniObject(..){ ...
| |
| 192 { | 187 { |
| 193 jobject arrayList = NewJniArrayList(env); | 188 jobject arrayList = NewJniArrayList(env); |
| 194 | 189 |
| 195 for (AdblockPlus::JsValueList::iterator it = list.begin(), end = list.end(); i t != end; ++it) | 190 for (AdblockPlus::JsValueList::const_iterator it = list.begin(), end = list.en d(); it != end; ++it) |
| 196 { | 191 { |
| 197 JniAddObjectToList(env, arrayList, | 192 JniAddObjectToList(env, arrayList, |
| 198 *JniLocalReference<jobject>(env, NewJniJsValue(env, *it))); | 193 *JniLocalReference<jobject>(env, NewJniJsValue(env, *it))); |
| 199 } | 194 } |
| 200 | 195 |
| 201 return arrayList; | 196 return arrayList; |
| 202 } | 197 } |
| 203 | 198 |
| 204 // TODO: List of functions that lack JNI bindings | 199 // TODO: List of functions that lack JNI bindings |
| 205 //std::vector<std::string> GetOwnPropertyNames() const; | 200 //std::vector<std::string> GetOwnPropertyNames() const; |
| 206 //void SetProperty(const std::string& name, const std::string& val); | 201 //void SetProperty(const std::string& name, const std::string& val); |
| 207 //void SetProperty(const std::string& name, int64_t val); | 202 //void SetProperty(const std::string& name, int64_t val); |
| 208 //void SetProperty(const std::string& name, bool val); | 203 //void SetProperty(const std::string& name, bool val); |
| 209 //void SetProperty(const std::string& name, JsValuePtr value); | 204 //void SetProperty(const std::string& name, JsValue value); |
| 210 //void SetProperty(const std::string& name, const char* val); | 205 //void SetProperty(const std::string& name, const char* val); |
| 211 //inline void SetProperty(const std::string& name, int val); | 206 //inline void SetProperty(const std::string& name, int val); |
| 212 //std::string GetClass() const; | 207 //std::string GetClass() const; |
| 213 //JsValuePtr Call(const JsValueList& params = JsValueList(), AdblockPlus::JsValu ePtr thisPtr = AdblockPlus::JsValuePtr()) const; | 208 //JsValue Call(const JsValueList& params = JsValueList(), AdblockPlus::JsValue t hisPtr = AdblockPlus::JsValue()) const; |
|
sergei
2017/04/26 09:21:00
I think the types of JsValue now are slightly diff
anton
2017/04/27 06:21:00
i wil revert this
| |
| 214 | 209 |
| 215 static JNINativeMethod methods[] = | 210 static JNINativeMethod methods[] = |
| 216 { | 211 { |
| 217 { (char*)"isUndefined", (char*)"(J)Z", (void*)JniIsUndefined }, | 212 { (char*)"isUndefined", (char*)"(J)Z", (void*)JniIsUndefined }, |
| 218 { (char*)"isNull", (char*)"(J)Z", (void*)JniIsNull }, | 213 { (char*)"isNull", (char*)"(J)Z", (void*)JniIsNull }, |
| 219 { (char*)"isNumber", (char*)"(J)Z", (void*)JniIsNumber }, | 214 { (char*)"isNumber", (char*)"(J)Z", (void*)JniIsNumber }, |
| 220 { (char*)"isString", (char*)"(J)Z", (void*)JniIsString }, | 215 { (char*)"isString", (char*)"(J)Z", (void*)JniIsString }, |
| 221 { (char*)"isBoolean", (char*)"(J)Z", (void*)JniIsBoolean }, | 216 { (char*)"isBoolean", (char*)"(J)Z", (void*)JniIsBoolean }, |
| 222 { (char*)"isObject", (char*)"(J)Z", (void*)JniIsObject }, | 217 { (char*)"isObject", (char*)"(J)Z", (void*)JniIsObject }, |
| 223 { (char*)"isArray", (char*)"(J)Z", (void*)JniIsArray }, | 218 { (char*)"isArray", (char*)"(J)Z", (void*)JniIsArray }, |
| 224 { (char*)"isFunction", (char*)"(J)Z", (void*)JniIsFunction }, | 219 { (char*)"isFunction", (char*)"(J)Z", (void*)JniIsFunction }, |
| 225 { (char*)"asString", (char*)"(J)Ljava/lang/String;", (void*)JniAsString }, | 220 { (char*)"asString", (char*)"(J)Ljava/lang/String;", (void*)JniAsString }, |
| 226 { (char*)"asLong", (char*)"(J)J", (void*)JniAsLong }, | 221 { (char*)"asLong", (char*)"(J)J", (void*)JniAsLong }, |
| 227 { (char*)"asBoolean", (char*)"(J)Z", (void*)JniAsBoolean }, | 222 { (char*)"asBoolean", (char*)"(J)Z", (void*)JniAsBoolean }, |
| 228 { (char*)"asList", (char*)"(J)Ljava/util/List;", (void*)JniAsList }, | 223 { (char*)"asList", (char*)"(J)Ljava/util/List;", (void*)JniAsList }, |
| 229 { (char*)"getProperty", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*) JniGetProperty }, | 224 { (char*)"getProperty", (char*)"(JLjava/lang/String;)" TYP("JsValue"), (void*) JniGetProperty }, |
| 230 { (char*)"dtor", (char*)"(J)V", (void*)JniDtor } | 225 { (char*)"dtor", (char*)"(J)V", (void*)JniDtor } |
| 231 }; | 226 }; |
| 232 | 227 |
| 233 extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_libadblockplus_JsValue_re gisterNatives(JNIEnv *env, jclass clazz) | 228 extern "C" JNIEXPORT void JNICALL Java_org_adblockplus_libadblockplus_JsValue_re gisterNatives(JNIEnv *env, jclass clazz) |
| 234 { | 229 { |
| 235 env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])); | 230 env->RegisterNatives(clazz, methods, sizeof(methods) / sizeof(methods[0])); |
| 236 } | 231 } |
| OLD | NEW |