home *** CD-ROM | disk | FTP | other *** search
- package com.netscape.javascript;
-
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
- import java.util.Enumeration;
- import java.util.Hashtable;
-
- class JavaMembers {
- private static Hashtable classTable = new Hashtable();
- // $FF: renamed from: cl java.lang.Class
- private Class field_0;
- private Hashtable members = new Hashtable(23);
- private Hashtable fieldAndMethods;
- private Hashtable staticMembers = new Hashtable(7);
- private Hashtable staticFieldAndMethods;
- private Constructor[] ctors;
-
- Object get(Scriptable var1, String var2, Object var3, boolean var4) {
- Hashtable var5 = var4 ? this.staticMembers : this.members;
- Object var6 = var5.get(var2);
- if (var6 == null) {
- throw this.reportMemberNotFound(var2);
- } else if (var6 instanceof Scriptable) {
- return var6;
- } else {
- Field var7 = (Field)var6;
-
- Object var8;
- try {
- var8 = var7.get(var4 ? null : var3);
- } catch (IllegalAccessException var10) {
- throw new RuntimeException("unexpected IllegalAccessException accessing Java field");
- }
-
- Class var9 = var7.getType();
- var1 = ScriptableObject.getTopLevelScope(var1);
- return NativeJavaObject.wrap(var1, var8, var9);
- }
- }
-
- public void put(String var1, Object var2, Object var3, boolean var4) {
- Hashtable var5 = var4 ? this.staticMembers : this.members;
- Object var6 = var5.get(var1);
- if (var6 == null) {
- throw this.reportMemberNotFound(var1);
- } else {
- if (var6 instanceof FieldAndMethods) {
- var6 = ((FieldAndMethods)var5.get(var1)).getField();
- }
-
- Object var7 = null;
-
- try {
- Field var12 = (Field)var6;
- var12.set(var2, NativeJavaObject.coerceType(var12.getType(), var3));
- } catch (ClassCastException var9) {
- Object[] var13 = new Object[]{var1};
- throw Context.reportRuntimeError(Context.getMessage("msg.java.method.assign", var13));
- } catch (IllegalAccessException var10) {
- throw new RuntimeException("unexpected IllegalAccessException accessing Java field");
- } catch (IllegalArgumentException var11) {
- Object[] var8 = new Object[]{var3.getClass().getName(), var7, var2.getClass().getName()};
- throw Context.reportRuntimeError(Context.getMessage("msg.java.internal.field.type", var8));
- }
- }
- }
-
- Constructor[] getConstructors() {
- return this.ctors;
- }
-
- JavaMembers(Scriptable var1, Class var2) {
- this.field_0 = var2;
- this.reflect(var1, var2);
- }
-
- RuntimeException reportMemberNotFound(String var1) {
- Object[] var2 = new Object[]{this.field_0.getName(), var1};
- return Context.reportRuntimeError(Context.getMessage("msg.java.member.not.found", var2));
- }
-
- static JavaMembers lookupClass(Scriptable var0, Class var1, Class var2) {
- Class var3 = var1;
- JavaMembers var4 = (JavaMembers)classTable.get(var1);
- if (var4 != null) {
- return var4;
- } else {
- if (var2 != null && var2 != var1 && !Modifier.isPublic(var1.getModifiers()) && Modifier.isPublic(var2.getModifiers())) {
- var3 = var2;
- }
-
- synchronized(classTable){}
-
- JavaMembers var7;
- try {
- var4 = (JavaMembers)classTable.get(var3);
- if (var4 == null) {
- var4 = new JavaMembers(var0, var3);
- classTable.put(var3, var4);
- var7 = var4;
- return var7;
- }
-
- var7 = var4;
- } catch (Throwable var9) {
- throw var9;
- }
-
- return var7;
- }
- }
-
- Hashtable getFieldAndMethodsObjects(Object var1, boolean var2) {
- Hashtable var3 = var2 ? this.staticFieldAndMethods : this.fieldAndMethods;
- if (var3 == null) {
- return null;
- } else {
- int var4 = var3.size();
- Hashtable var5 = new Hashtable(var4);
- Enumeration var6 = var3.elements();
-
- while(var4-- > 0) {
- FieldAndMethods var7 = (FieldAndMethods)var6.nextElement();
- var7 = (FieldAndMethods)var7.clone();
- var7.setJavaObject(var1);
- var5.put(var7.getName(), var7);
- }
-
- return var5;
- }
- }
-
- void reflect(Scriptable var1, Class var2) {
- Method[] var3 = var2.getMethods();
-
- for(int var4 = 0; var4 < var3.length; ++var4) {
- this.reflectMethod(var1, var3[var4]);
- }
-
- Field[] var6 = var2.getFields();
-
- for(int var5 = 0; var5 < var6.length; ++var5) {
- this.reflectField(var6[var5]);
- }
-
- this.ctors = var2.getConstructors();
- }
-
- void reflectMethod(Scriptable var1, Method var2) {
- int var3 = var2.getModifiers();
- if (Modifier.isPublic(var3)) {
- boolean var4 = Modifier.isStatic(var3);
- Hashtable var5 = var4 ? this.staticMembers : this.members;
- String var6 = var2.getName();
- NativeJavaMethod var7 = (NativeJavaMethod)var5.get(var6);
- if (var7 == null) {
- var7 = new NativeJavaMethod();
- ((ScriptableObject)var7).setParentScope(var1);
- ((ScriptableObject)var7).setPrototype(ScriptableObject.getFunctionPrototype(var1));
- var5.put(var6, var7);
- var7.add(var2);
- } else {
- var7.add(var2);
- }
- }
- }
-
- boolean has(String var1, boolean var2) {
- Hashtable var3 = var2 ? this.staticMembers : this.members;
- return var3.get(var1) != null;
- }
-
- Object[] getIds(boolean var1) {
- Hashtable var2 = var1 ? this.staticMembers : this.members;
- int var3 = var2.size();
- Object[] var4 = new Object[var3];
- Enumeration var5 = var2.keys();
-
- for(int var6 = 0; var6 < var3; ++var6) {
- var4[var6] = var5.nextElement();
- }
-
- return var4;
- }
-
- Class getReflectedClass() {
- return this.field_0;
- }
-
- void reflectField(Field var1) {
- int var2 = var1.getModifiers();
- if (Modifier.isPublic(var2)) {
- boolean var3 = Modifier.isStatic(var2);
- Hashtable var4 = var3 ? this.staticMembers : this.members;
- String var5 = var1.getName();
- Object var6 = var4.get(var5);
- if (var6 != null) {
- if (var6 instanceof NativeJavaMethod) {
- NativeJavaMethod var7 = (NativeJavaMethod)var6;
- Hashtable var8 = var3 ? this.staticFieldAndMethods : this.fieldAndMethods;
- if (var8 == null) {
- var8 = new Hashtable(11);
- if (var3) {
- this.staticFieldAndMethods = var8;
- } else {
- this.fieldAndMethods = var8;
- }
- }
-
- FieldAndMethods var9 = new FieldAndMethods(var7.getMethods(), var1);
- var8.put(var5, var9);
- var4.put(var5, var9);
- } else if (var6 instanceof Field) {
- throw new RuntimeException("cannot have multiple Java fields with same name");
- } else {
- throw new RuntimeException("unknown member type");
- }
- } else {
- var4.put(var5, var1);
- }
- }
- }
- }
-