| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:07:58
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
Oi, já vi isso em algum lugar, mas não consegui achar.
Tenho um método x(), e quero que ele seja capaz de determinar a partir de qual método ele foi invocado.
new Exception().getStackTrace()[1] não resolve porque eu só consigo saber o nome do método mas não a assinatura.
Alguém tem uma idéia?
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:18:45
|
cmoscoso
Virtual Machine Man
Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline
|
victorwss wrote:Oi, já vi isso em algum lugar, mas não consegui achar.
Tenho um método x(), e quero que ele seja capaz de determinar a partir de qual método ele foi invocado.
new Exception().getStackTrace()[1] não resolve porque eu só consigo saber o nome do método mas não a assinatura.
Alguém tem uma idéia?
Assinatura pega via reflection;
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:22:34
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Puxa, é meio desajeitado mesmo - já que StackTraceElement só dá o nome do método. Você pode pegar o número da linha e, com o código-fonte original, achar o overload adequado, mas é bem trabalhoso.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:23:11
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
cmoscoso wrote:
victorwss wrote:Oi, já vi isso em algum lugar, mas não consegui achar.
Tenho um método x(), e quero que ele seja capaz de determinar a partir de qual método ele foi invocado.
new Exception().getStackTrace()[1] não resolve porque eu só consigo saber o nome do método mas não a assinatura.
Alguém tem uma idéia?
Assinatura pega via reflection;
O problema é a sobrecarga de métodos. Tendo apenas o nome dele, não dá para saber qual dos métodos sobrecarregados chamou.
thingol wrote:Puxa, é meio desajeitado mesmo - já que StackTraceElement só dá o nome do método. Você pode pegar o número da linha e, com o código-fonte original, achar o overload adequado, mas é bem trabalhoso.
Não posso assumir que o código-fonte está disponível. :'(
This message was edited 1 time. Last update was at 15/10/2008 13:24:16
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:26:21
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Imagino que, com o ASM ( asm.objectweb.org ) você possa até determinar os números das linhas em que os diversos métodos foram definidos (com o .class da classe que contém o tal método ) , mas deve dar um bom trabalho. (Suponho que o .class está com a informação de depuração ; se estiver, os números das linhas estarão disponíveis). Na prática, se você não tem o costume de efetuar muitos overloads em uma classe (que é o caso de 98% das classes que você usa), não deveria ocasionar problemas tão sérios assim, mas em determinadas condições você não saber a assinatura pode ser problemático.
This message was edited 1 time. Last update was at 15/10/2008 13:27:04
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:26:57
|
cmoscoso
Virtual Machine Man
Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline
|
Depois de todas as opcoes que o thingol deu me veio essa pergunta:
Porque mesmo vc quer depender de quem chamou o metodo?
This message was edited 1 time. Last update was at 15/10/2008 13:30:29
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:31:13
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
cmoscoso wrote:Mas porque mesmo vc quer depender de quem chamou o metodo?
É para fazer um framework de rastreamento de chamadas de métodos (para log e debug), sem ter que ficar copiando e colando o nome do método e a assinatura em cada invocação.
Se a chamada se resumir a instanciar uma classe anônima que é subclasse de uma abstrata, eu consigo resolver via Class.getEnclosingClass(), Class.getEnclosingMethod() e Class.getEnclosingConstructor(). Mas ter que ficar instanciado classes anônimas aonde deveria haver uma simples chamada a um método é muito gambi.
This message was edited 2 times. Last update was at 15/10/2008 13:34:18
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:41:42
|
cmoscoso
Virtual Machine Man
Membro desde: 23/10/2007 10:08:29
Mensagens: 687
Offline
|
victorwss wrote:
É para fazer um framework de rastreamento de chamadas de métodos (para log e debug), sem ter que ficar copiando e colando o nome do método e a assinatura em cada invocação.
Ja vi sendo feito assim. Neste caso como a assinatura era padronizada(!) copiava apenas o metodo.
Se a chamada se resumir a instanciar uma classe anônima que é subclasse de uma abstrata, eu consigo resolver via Class.getEnclosingClass(), Class.getEnclosingMethod() e Class.getEnclosingConstructor(). Mas ter que ficar instanciado classes anônimas aonde deveria haver uma simples chamada a um método é muito gambi.
Nao da pra isolar esse codigo de suporte em decorators?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2008 13:47:02
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
cmoscoso wrote:
victorwss wrote:
É para fazer um framework de rastreamento de chamadas de métodos (para log e debug), sem ter que ficar copiando e colando o nome do método e a assinatura em cada invocação.
Ja vi sendo feito assim. Neste caso como a assinatura era padronizada(!) copiava apenas o metodo.
Se a chamada se resumir a instanciar uma classe anônima que é subclasse de uma abstrata, eu consigo resolver via Class.getEnclosingClass(), Class.getEnclosingMethod() e Class.getEnclosingConstructor(). Mas ter que ficar instanciado classes anônimas aonde deveria haver uma simples chamada a um método é muito gambi.
Nao da pra isolar esse codigo de suporte em decorators?
Acho que ele só conseguiria ver o decorator com isso. Mas não sei, talvez tenha.
This message was edited 1 time. Last update was at 15/10/2008 13:53:40
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
|
|