+2007-06-12 Anders Carlsson <andersca@apple.com>
+
+ Reviewed by Geoff.
+
+ Get rid of Constructor and its only subclass JavaConstructor.
+
+ * bindings/c/c_class.h:
+ * bindings/jni/jni_class.cpp:
+ (JavaClass::JavaClass):
+ (JavaClass::~JavaClass):
+ * bindings/jni/jni_class.h:
+ * bindings/jni/jni_runtime.cpp:
+ * bindings/jni/jni_runtime.h:
+ * bindings/objc/objc_class.h:
+ * bindings/runtime.h:
+
2007-06-12 Anders Carlsson <andersca@apple.com>
Reviewed by Geoff.
virtual MethodList methodsNamed(const Identifier&, Instance*) const;
virtual Field* fieldNamed(const Identifier&, Instance*) const;
- virtual Constructor* constructorAt(int) const { return 0; }
- virtual int numConstructors() const { return 0; }
-
private:
NPClass* _isa;
mutable MethodMap _methods;
}
methodList->addMethod(aMethod);
env->DeleteLocalRef(aJMethod);
- }
-
- // Get the constructors
- jarray constructors = (jarray)callJNIObjectMethod (aClass, "getConstructors", "()[Ljava/lang/reflect/Constructor;");
- _numConstructors = env->GetArrayLength(constructors);
- _constructors = new JavaConstructor[_numConstructors];
- for (i = 0; i < _numConstructors; i++) {
- jobject aConstructor = env->GetObjectArrayElement((jobjectArray)constructors, i);
- _constructors[i] = JavaConstructor(env, aConstructor);
- env->DeleteLocalRef(aConstructor);
- }
+ }
}
JavaClass::~JavaClass() {
delete methodList;
}
_methods.clear();
-
- delete [] _constructors;
}
MethodList JavaClass::methodsNamed(const Identifier& identifier, Instance*) const
virtual const char *name() const { return _name; };
- virtual MethodList methodsNamed(const Identifier&, Instance *instance) const;
-
- virtual Field *fieldNamed(const Identifier&, Instance *instance) const;
-
- virtual Constructor *constructorAt(int i) const {
- return &_constructors[i];
- };
-
- virtual int numConstructors() const { return _numConstructors; };
+ virtual MethodList methodsNamed(const Identifier&, Instance* instance) const;
+ virtual Field *fieldNamed(const Identifier&, Instance* instance) const;
bool isNumberClass() const;
bool isBooleanClass() const;
const char *_name;
FieldMap _fields;
MethodListMap _methods;
- JavaConstructor *_constructors;
- int _numConstructors;
};
} // namespace Bindings
}
}
-JavaConstructor::JavaConstructor (JNIEnv *env, jobject aConstructor)
-{
- // Get parameters
- jarray jparameters = (jarray)callJNIObjectMethod (aConstructor, "getParameterTypes", "()[Ljava/lang/Class;");
- _numParameters = env->GetArrayLength (jparameters);
- _parameters = new JavaParameter[_numParameters];
-
- int i;
- for (i = 0; i < _numParameters; i++) {
- jobject aParameter = env->GetObjectArrayElement ((jobjectArray)jparameters, i);
- jstring parameterName = (jstring)callJNIObjectMethod (aParameter, "getName", "()Ljava/lang/String;");
- _parameters[i] = JavaParameter(env, parameterName);
- env->DeleteLocalRef (aParameter);
- env->DeleteLocalRef (parameterName);
- }
-}
-
JavaMethod::JavaMethod (JNIEnv *env, jobject aMethod)
{
// Get return type
JavaParameter () : _JNIType(invalid_type) {};
JavaParameter (JNIEnv *env, jstring type);
-
- ~JavaParameter() {
- };
- JavaParameter(const JavaParameter &other) : Parameter() {
- _type = other._type;
- _JNIType = other._JNIType;
- };
-
- JavaParameter &operator=(const JavaParameter &other)
- {
- if (this == &other)
- return *this;
-
- _type = other._type;
- _JNIType = other._JNIType;
-
- return *this;
- }
-
virtual RuntimeType type() const { return _type.UTF8String(); }
JNIType getJNIType() const { return _JNIType; }
};
-class JavaConstructor : public Constructor
-{
-public:
- JavaConstructor() : _parameters (0), _numParameters(0) {};
-
- JavaConstructor (JNIEnv *e, jobject aConstructor);
-
- ~JavaConstructor() {
- delete [] _parameters;
- };
-
- void _commonCopy(const JavaConstructor &other) {
- _numParameters = other._numParameters;
- _parameters = new JavaParameter[_numParameters];
- int i;
- for (i = 0; i < _numParameters; i++) {
- _parameters[i] = other._parameters[i];
- }
- }
-
- JavaConstructor(const JavaConstructor &other) : Constructor() {
- _commonCopy (other);
- };
-
- JavaConstructor &operator=(const JavaConstructor &other)
- {
- if (this == &other)
- return *this;
-
- delete [] _parameters;
-
- _commonCopy (other);
-
- return *this;
- }
-
- virtual Parameter *parameterAt(int i) const { return &_parameters[i]; };
- virtual int numParameters() const { return _numParameters; };
-
-private:
- JavaParameter *_parameters;
- int _numParameters;
-};
-
-
class JavaField : public Field
{
public:
JavaField() : _field(0) {};
JavaField (JNIEnv *env, jobject aField);
- JavaField(const JavaField &other) :
- Field(), _name(other._name), _type(other._type) {};
-
- JavaField &operator=(const JavaField &other)
- {
- if (this == &other)
- return *this;
-
- _name = other._name;
- _type = other._type;
- _field = other._field;
-
- return *this;
- }
-
virtual JSValue *valueFromInstance(ExecState *exec, const Instance *instance) const;
virtual void setValueToInstance(ExecState *exec, const Instance *instance, JSValue *aValue) const;
virtual JSValue *fallbackObject(ExecState *exec, Instance *instance, const Identifier &propertyName);
- virtual Constructor *constructorAt(int) const { return 0; }
- virtual int numConstructors() const { return 0; }
-
ClassStructPtr isa() { return _isa; }
private:
virtual ~Parameter() {}
};
-// FIXME: Constructor should be removed from abstract runtime classes
-// unless we want to support instantiation of runtime objects from
-// JavaScript.
-class Constructor
-{
-public:
- virtual Parameter* parameterAt(int i) const = 0;
- virtual int numParameters() const = 0;
-
- virtual ~Constructor() {}
-};
-
class Field
{
public:
virtual MethodList methodsNamed(const Identifier&, Instance*) const = 0;
- virtual Constructor *constructorAt(int i) const = 0;
- virtual int numConstructors() const = 0;
-
virtual Field *fieldNamed(const Identifier&, Instance*) const = 0;
virtual JSValue* fallbackObject(ExecState*, Instance*, const Identifier&) { return jsUndefined(); }