reassemble method

void reassemble(
  1. VmClass vmclass
)

重新装载该包装类型的属性

Implementation

void reassemble(VmClass vmclass) {
  if (identifier != vmclass.identifier || isExternal || vmclass.isExternal) {
    throw ('Unsupport reassemble operator: $identifier<isExternal $isExternal> => ${vmclass.identifier}<isExternal ${vmclass.isExternal}>');
  }
  //重置
  superclassNames.clear();
  internalProxyMap?.clear();
  internalStaticPropertyMap?.clear();
  internalInstanceFieldTree?.clear();
  _internalSuperclass = null;
  //复制
  superclassNames.addAll(vmclass.superclassNames);
  internalProxyMap?.addAll(vmclass.internalProxyMap as Map<String, VmProxy<T>>? ?? const {});
  internalStaticPropertyMap?.addAll(vmclass.internalStaticPropertyMap ?? const {});
  internalInstanceFieldTree?.addAll(vmclass.internalInstanceFieldTree ?? const []);
  _internalSuperclass = vmclass._internalSuperclass;
  //绑定
  internalProxyMap?.forEach((key, value) => value.bindVmClass(this)); //给代理集合绑定包装类型
  internalStaticPropertyMap?.forEach((key, value) => value.bindStaticScope(this)); //给类静态成员绑定作用域
}