fix: use correct class instead of proxy
This commit is contained in:
parent
6eea342d04
commit
0d629a6e82
@ -25,7 +25,8 @@ public class NativeWrapperProvider implements WrapperProvider {
|
|||||||
private final HashMap<Class<?>, FunctionValue> constructors = new HashMap<>();
|
private final HashMap<Class<?>, FunctionValue> constructors = new HashMap<>();
|
||||||
private final HashMap<Class<?>, ObjectValue> prototypes = new HashMap<>();
|
private final HashMap<Class<?>, ObjectValue> prototypes = new HashMap<>();
|
||||||
private final HashMap<Class<?>, ObjectValue> namespaces = new HashMap<>();
|
private final HashMap<Class<?>, ObjectValue> namespaces = new HashMap<>();
|
||||||
private final HashMap<Class<?>, Class<?>> proxies = new HashMap<>();
|
private final HashMap<Class<?>, Class<?>> classToProxy = new HashMap<>();
|
||||||
|
private final HashMap<Class<?>, Class<?>> proxyToClass = new HashMap<>();
|
||||||
private final HashSet<Class<?>> ignore = new HashSet<>();
|
private final HashSet<Class<?>> ignore = new HashSet<>();
|
||||||
|
|
||||||
private static Object call(Context ctx, String name, Method method, Object thisArg, Object... args) {
|
private static Object call(Context ctx, String name, Method method, Object thisArg, Object... args) {
|
||||||
@ -337,6 +338,8 @@ public class NativeWrapperProvider implements WrapperProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ObjectValue getProto(Class<?> clazz) {
|
public ObjectValue getProto(Class<?> clazz) {
|
||||||
|
if (proxyToClass.containsKey(clazz)) return getProto(proxyToClass.get(clazz));
|
||||||
|
|
||||||
initType(clazz, constructors.get(clazz), prototypes.get(clazz));
|
initType(clazz, constructors.get(clazz), prototypes.get(clazz));
|
||||||
while (clazz != null) {
|
while (clazz != null) {
|
||||||
var res = prototypes.get(clazz);
|
var res = prototypes.get(clazz);
|
||||||
@ -346,6 +349,8 @@ public class NativeWrapperProvider implements WrapperProvider {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public ObjectValue getNamespace(Class<?> clazz) {
|
public ObjectValue getNamespace(Class<?> clazz) {
|
||||||
|
if (proxyToClass.containsKey(clazz)) return getNamespace(proxyToClass.get(clazz));
|
||||||
|
|
||||||
if (!namespaces.containsKey(clazz)) namespaces.put(clazz, makeNamespace(clazz));
|
if (!namespaces.containsKey(clazz)) namespaces.put(clazz, makeNamespace(clazz));
|
||||||
while (clazz != null) {
|
while (clazz != null) {
|
||||||
var res = namespaces.get(clazz);
|
var res = namespaces.get(clazz);
|
||||||
@ -355,6 +360,8 @@ public class NativeWrapperProvider implements WrapperProvider {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
public FunctionValue getConstr(Class<?> clazz) {
|
public FunctionValue getConstr(Class<?> clazz) {
|
||||||
|
if (proxyToClass.containsKey(clazz)) return getConstr(proxyToClass.get(clazz));
|
||||||
|
|
||||||
initType(clazz, constructors.get(clazz), prototypes.get(clazz));
|
initType(clazz, constructors.get(clazz), prototypes.get(clazz));
|
||||||
while (clazz != null) {
|
while (clazz != null) {
|
||||||
var res = constructors.get(clazz);
|
var res = constructors.get(clazz);
|
||||||
@ -366,7 +373,7 @@ public class NativeWrapperProvider implements WrapperProvider {
|
|||||||
|
|
||||||
@Override public WrapperProvider fork(Environment env) {
|
@Override public WrapperProvider fork(Environment env) {
|
||||||
var res = new NativeWrapperProvider();
|
var res = new NativeWrapperProvider();
|
||||||
for (var pair : proxies.entrySet()) {
|
for (var pair : classToProxy.entrySet()) {
|
||||||
res.set(pair.getKey(), pair.getValue());
|
res.set(pair.getKey(), pair.getValue());
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
@ -375,6 +382,13 @@ public class NativeWrapperProvider implements WrapperProvider {
|
|||||||
public void set(Class<?> clazz, Class<?> wrapper) {
|
public void set(Class<?> clazz, Class<?> wrapper) {
|
||||||
if (clazz == null) return;
|
if (clazz == null) return;
|
||||||
if (wrapper == null) wrapper = clazz;
|
if (wrapper == null) wrapper = clazz;
|
||||||
|
if (classToProxy.get(clazz) == wrapper) return;
|
||||||
|
|
||||||
|
classToProxy.remove(wrapper);
|
||||||
|
proxyToClass.remove(clazz);
|
||||||
|
|
||||||
|
classToProxy.put(clazz, wrapper);
|
||||||
|
proxyToClass.put(wrapper, clazz);
|
||||||
|
|
||||||
ignore.remove(clazz);
|
ignore.remove(clazz);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user