JNIBridge.h revision e1ac8b286215f0cb7df30bca8d3057d6992f2851
1/* 2 * Copyright (C) 2003 Apple Computer, Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#ifndef JNIBridge_h 27#define JNIBridge_h 28 29#if ENABLE(MAC_JAVA_BRIDGE) 30 31#include "JNIUtility.h" 32#include "JavaInstanceJSC.h" 33 34#if USE(JSC) 35#include "JavaStringJSC.h" 36#endif 37 38namespace JSC 39{ 40 41namespace Bindings 42{ 43 44typedef const char* RuntimeType; 45 46class JavaString 47{ 48public: 49 JavaString() 50 { 51 m_impl.init(); 52 } 53 54 JavaString(JNIEnv* e, jstring s) 55 { 56 m_impl.init(e, s); 57 } 58 59 JavaString(jstring s) 60 { 61 m_impl.init(getJNIEnv(), s); 62 } 63 64 const char* UTF8String() const { return m_impl.UTF8String(); } 65 const jchar* uchars() const { return m_impl.uchars(); } 66 int length() const { return m_impl.length(); } 67#if USE(JSC) 68 operator UString() const { return m_impl.uString(); } 69#endif 70 71private: 72 JavaStringImpl m_impl; 73}; 74 75class JavaParameter 76{ 77public: 78 JavaParameter () : _JNIType(invalid_type) {}; 79 JavaParameter (JNIEnv *env, jstring type); 80 virtual ~JavaParameter() { } 81 82 RuntimeType type() const { return _type.UTF8String(); } 83 JNIType getJNIType() const { return _JNIType; } 84 85private: 86 JavaString _type; 87 JNIType _JNIType; 88}; 89 90 91class JavaField : public Field 92{ 93public: 94 JavaField (JNIEnv *env, jobject aField); 95 96 virtual JSValue valueFromInstance(ExecState *exec, const Instance *instance) const; 97 virtual void setValueToInstance(ExecState *exec, const Instance *instance, JSValue aValue) const; 98 99 const JavaString& name() const { return _name; } 100 virtual RuntimeType type() const { return _type.UTF8String(); } 101 102 JNIType getJNIType() const { return _JNIType; } 103 104private: 105 void dispatchSetValueToInstance(ExecState *exec, const JavaInstance *instance, jvalue javaValue, const char *name, const char *sig) const; 106 jvalue dispatchValueFromInstance(ExecState *exec, const JavaInstance *instance, const char *name, const char *sig, JNIType returnType) const; 107 108 JavaString _name; 109 JavaString _type; 110 JNIType _JNIType; 111 RefPtr<JObjectWrapper> _field; 112}; 113 114 115class JavaMethod : public Method 116{ 117public: 118 JavaMethod(JNIEnv* env, jobject aMethod); 119 ~JavaMethod(); 120 121 const JavaString& name() const { return _name; } 122 RuntimeType returnType() const { return _returnType.UTF8String(); }; 123 JavaParameter* parameterAt(int i) const { return &_parameters[i]; }; 124 int numParameters() const { return _numParameters; }; 125 126 const char *signature() const; 127 JNIType JNIReturnType() const; 128 129 jmethodID methodID (jobject obj) const; 130 131 bool isStatic() const { return _isStatic; } 132 133private: 134 JavaParameter* _parameters; 135 int _numParameters; 136 JavaString _name; 137 mutable char* _signature; 138 JavaString _returnType; 139 JNIType _JNIReturnType; 140 mutable jmethodID _methodID; 141 bool _isStatic; 142}; 143 144class JavaArray : public Array 145{ 146public: 147 JavaArray(jobject array, const char* type, PassRefPtr<RootObject>); 148 virtual ~JavaArray(); 149 150 RootObject* rootObject() const; 151 152 virtual void setValueAt(ExecState *exec, unsigned int index, JSValue aValue) const; 153 virtual JSValue valueAt(ExecState *exec, unsigned int index) const; 154 virtual unsigned int getLength() const; 155 156 jobject javaArray() const { return _array->m_instance; } 157 158 static JSValue convertJObjectToArray (ExecState* exec, jobject anObject, const char* type, PassRefPtr<RootObject>); 159 160private: 161 RefPtr<JObjectWrapper> _array; 162 unsigned int _length; 163 const char *_type; 164}; 165 166} // namespace Bindings 167 168} // namespace JSC 169 170#endif // ENABLE(MAC_JAVA_BRIDGE) 171 172#endif // JNIBridge_h 173