Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Pagetitle
Reflection.getClassesByAnnotation
Reflection.getClassesByAnnotation

Retorna um array com o nome de todas as classes que tem uma determinada annotationEfetua a pesquisa de uma Annotation a partir de um namespace e retorna um array contendo as informações de onde a Annotation foi encontrada.

Sintaxe

Bloco de código
collapsefalse
Reflection.getClassesByAnnotation( cAnnotationName,[cClassNameFilter]cNamespaceFilter) )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cAnnotationName

caractere

Indica o nome da annotation Annotation que será procurada em todas as pesquisada nas classes que estão compiladas no repositório

X


cClassNameFiltercNamespaceFilter
caractereIndica uma expressão regular para os nomes das classesNome do namespace onde deve ser procurada a Annotation
Obs.: Aqui pode ser feito o uso do caractere para fazer a busca no namespace
           XX

Retorno

Nome

Tipo

Descrição

aRet

Array

Retorna um array com o nome de todas as classes que tem uma determinada annotation.

...

Array com o resultado da busca pela Annotation.
Em cada posição há um objeto Json com as seguintes propriedades:

  • cClassName -  nome do namespace . classe onde a Annotation pesquisada foi encontrada.
  • cProgramName - nome do programa fonte onde a Annotation pesquisada foi encontrada.

Exemplo:

Bloco de código
languagecpp
themeEclipse
titleexemplo1test_doc_resourceGetClassesByAnnotation.tlpp
linenumberstrue
//Definicoes das annotation, deve estar num fonte*
Programa test_doc_resourceGetClassesByAnnotation1.tlpp
*/


#include "msobjecttlpp-core.chth" 

@interfacenamespace AnnotationExemploresourceClassesbyAnnotation
 
@annotation AnnotationResource
  nickname as char
@end
namespace exemplo

@AnnotationExemplo@AnnotationResource(nickname = "MeuObject")
class Obj1'Resource1')

Class resourceClassesbyAnnotation1
 
  Public  public method new()data data1

  Public Method New()
  
EndClass

@JsonField(nickname = "10")
class Obj2
    public method new()
EndClass


method new() class Obj2
return self

method new() class Obj1
return self


Main Function Exemplo()
    Method New() class resourceClassesbyAnnotation1
Return Self

Bloco de código
languagecpp
themeEclipse
titletest_doc_resourceGetClassesByAnnotation2.tlpp
linenumberstrue
/*
Programa test_doc_resourceGetClassesByAnnotation2.tlpp
*/

#include "tlpp-core.th"

namespace resourceClassesbyAnnotation
 
@annotation AnnotationResource
  nickname as char
@end
 
@AnnotationResource(nickname='Resource2')

Class resourceClassesbyAnnotation2
 
  Public data data1

  Public Method New()
  
EndClass

Method New() class resourceClassesbyAnnotation2
Return Self
Bloco de código
languagecpp
themeEclipse
titletestGetClassesByAnnotation.tlpp
linenumberstrue
#include "tlpp-core.th"
 
Function u_testGetClassesByAnnotation()
  Local aRet as array
 
  aRetretVar := Reflection.getClassesByAnnotation("JsonField", "exemplo.*") //procura por todas as classes do namespace exemplo'AnnotationResource',"resourceClassesbyAnnotation*")

  if(valType(aRet) <> "U") .and. (valType(aRet) == "A" .and. len(aRet) > 0)
    conout(aRet[1]:cClassName)
    conout(aRet[1]:cProgramName)
    varinfo("retVar", retVar)conout(aRet[2]:cClassName)
    conout(aRet[2]:cProgramName)
  else
    
Return cJsonconout('Não foi encontrada nenhuma informação de Annotation com os padrões declarados')
  endif
Return

Resultado do Exemplo

retVar -> ARRAY ( 2) [...]
retVar[1] -> C ( 12) [EXEMPLO.OBJ1]
retVar[2] -> C ( 12) [EXEMPLO.OBJ2]RESOURCECLASSESBYANNOTATION.RESOURCECLASSESBYANNOTATION1
TEST_DOC_RESOURCEGETCLASSESBYANNOTATION1.TLPP
RESOURCECLASSESBYANNOTATION.RESOURCECLASSESBYANNOTATION2
TEST_DOC_RESOURCEGETCLASSESBYANNOTATION2.TLPP  

Abrangência

17.3.0.3

Veja também