Há a viabilidade técnica de se implementar o proxy dinâmico do Java no TotalCross?
O proxy dinâmico é um objeto que pertence à classe java.lang.reflect.Proxy
, criado a partir de uma lista de interfaces e de um j.l.r.InvocationHandler
.
Em cima apenas dessas duas informações, toda chamada aos métodos das interfaces consiste em:
- montar os argumentos dentro de um
Object[]
- identificar qual a assinatura do método que foi chamado e pegar o objeto
j.l.r.Method
adequado da classe - chamar o
InvocationHandler
com essas duas informações
Tem um artigo da Oracle/do Java justamente sobre isso: Dynamic Proxy Classes.
Isso me interessa por 2 motivos ortogonais e distintos:
- programação orientada a aspecto
- migrar o MyBatis para TotalCross
Da maneira como eu entendi que funciona um proxy dinâmico, existiriam duas possíveis soluções:
- criar bytecodes dinamicamente representando o conjunto de interfaces e os seus métodos
- fazer com que todo e qualquer
invokeInterface
funcione em um objeto de proxy, identificando o método desejado através do nome/argumentos e montando em umObject[]
os argumentos que já estão na pilha, para então chamar oInvocationHandler
dentro do proxy
Existe a possibilidade da VM do TotalCross permitir uma dessas opções? Creio eu que a segunda sugestão seja bem mais pesada de se fazer do que a primeira, ainda mais porque altera o comportamento do invokeInterface
ou o equivalente em opcode TotalCross, porém a primeira opção abre a brecha para instanciar, completamente, uma classe e seus métodos em runtime.