home *** CD-ROM | disk | FTP | other *** search
- package com.netscape.javascript;
-
- import java.lang.reflect.Constructor;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Member;
- import java.util.Hashtable;
-
- public class NativeJavaClass extends NativeJavaObject implements Function {
- private Hashtable fieldAndMethods;
-
- public Scriptable construct(Context var1, Scriptable var2, Object[] var3) throws JavaScriptException {
- for(int var4 = 0; var4 < var3.length; ++var4) {
- if (var3[var4] instanceof Wrapper) {
- var3[var4] = ((Wrapper)var3[var4]).unwrap();
- }
- }
-
- Constructor[] var17 = super.members.getConstructors();
- Member var5 = NativeJavaMethod.findFunction(var17, var3);
- Constructor var6 = (Constructor)var5;
- if (var6 == null) {
- String var18 = NativeJavaMethod.signature(var3);
- Object[] var20 = new Object[]{this.getClassObject().getName(), var18};
- throw Context.reportRuntimeError(Context.getMessage("msg.no.java.ctor", var20));
- } else {
- Class[] var7 = var6.getParameterTypes();
-
- for(int var8 = 0; var8 < var3.length; ++var8) {
- var3[var8] = NativeJavaObject.coerceType(var7[var8], var3[var8]);
- }
-
- Object var19;
- try {
- var19 = var6.newInstance(var3);
- } catch (InstantiationException var13) {
- Object[] var22 = new Object[]{((Throwable)var13).getMessage(), this.getClassObject().getName()};
- throw Context.reportRuntimeError(Context.getMessage("msg.cant.instantiate", var22));
- } catch (IllegalArgumentException var14) {
- String var21 = NativeJavaMethod.signature(var3);
- String var11 = var6.toString();
- Object[] var12 = new Object[]{((Throwable)var14).getMessage(), var11, var21};
- throw Context.reportRuntimeError(Context.getMessage("msg.bad.ctor.sig", var12));
- } catch (InvocationTargetException var15) {
- throw JavaScriptException.wrapException(var2, var15);
- } catch (IllegalAccessException var16) {
- Object[] var10 = new Object[]{((Throwable)var16).getMessage()};
- throw Context.reportRuntimeError(Context.getMessage("msg.java.internal.private", var10));
- }
-
- Scriptable var9 = ScriptableObject.getTopLevelScope(this);
- return (Scriptable)NativeJavaObject.wrap(var9, var19, this.getClassObject());
- }
- }
-
- public boolean hasInstance(Scriptable var1) {
- if (var1 instanceof NativeJavaObject) {
- Object var2 = ((NativeJavaObject)var1).unwrap();
- return this.getClassObject().isInstance(var2);
- } else {
- return false;
- }
- }
-
- public Class getClassObject() {
- return (Class)super.unwrap();
- }
-
- public static NativeJavaClass wrap(Scriptable var0, Class var1) {
- return new NativeJavaClass(var0, var1);
- }
-
- public Object get(String var1, Scriptable var2) {
- if (var1.equals("prototype")) {
- return null;
- } else {
- if (this.fieldAndMethods != null) {
- Object var3 = this.fieldAndMethods.get(var1);
- if (var3 != null) {
- return var3;
- }
- }
-
- return super.members.get(this, var1, super.javaObject, true);
- }
- }
-
- public void put(String var1, Scriptable var2, Object var3) {
- super.members.put(var1, super.javaObject, var3, true);
- }
-
- public Object getDefaultValue(Class var1) {
- if (var1 != null && var1 != ScriptRuntime.StringClass) {
- if (var1 == ScriptRuntime.BooleanClass) {
- return Boolean.TRUE;
- } else {
- return var1 == ScriptRuntime.NumberClass ? ScriptRuntime.NaNobj : this;
- }
- } else {
- return this.toString();
- }
- }
-
- public String toString() {
- return "[JavaClass " + this.getClassObject().getName() + "]";
- }
-
- public NativeJavaClass(Scriptable var1, Class var2) {
- super(var2, JavaMembers.lookupClass(var1, var2, var2));
- this.fieldAndMethods = super.members.getFieldAndMethodsObjects(super.javaObject, false);
- }
-
- public Object call(Context var1, Scriptable var2, Scriptable var3, Object[] var4) throws JavaScriptException {
- return this.construct(var1, var2, var4);
- }
-
- public boolean has(String var1, Scriptable var2) {
- return super.members.has(var1, true);
- }
-
- public Object[] getIds() {
- return super.members.getIds(true);
- }
-
- public String getClassName() {
- return "JavaClass";
- }
- }
-