Nova versão do framework Reflection-DSL!

Olá,

Foi publicada uma nova versão do Reflection-DSL.
Para quem não conhece o projeto, ele permite fazer algo como:

Boolean isLogged = Introspector.forClass("package.User").create("param1", 2).method("isLogged").invoke();
String formatedValue = Introspector.forClass("package.FormatUtil").create(Locale.US).method("formatCurrency").invoke(1560.99,  "R$ #,##");

Nesta versão foram implementadas as seguntes features:

Possibilidade de fazer buscas nas classes através de uma api semelhante a Criteria do hibernate

// Existem vários tipos de Restriction's, como: eq, ne, like, regex, in, withModifiers, annotatedWith, notAnnotatedWith, fieldClassEq, methodWithParams, disjunction (para fazer buscas complexas) entre outros. Confira!!
Criterion criterion = Introspector.createCriterion(ClasseDominio.class);
criterion.add(Restriction.annotatedWith(MyAnnotation.class));
List result = criterion.list(); //Retorna todos os fields e methods anotados com MyAnnotation.class !!!

Possibilidade de fazer buscas nas classes através de uma api semelhante a HQL do hibernate

// Tem todos os tipos de restrictions existentes na api Criterion!!
Query query = Introspector.createQuery("FROM package.ClasseDominio WHERE annotation eq 'package.MyAnnotation'"); 
List result = query.list(); //Retorna todos os fields e methods anotados com MyAnnotation.class !!!

Implementação de cache das buscas

Esperamos que este framework facilite seu trabalho ao utilizar reflection.
Ajudem-nos enviando sugestões, críticas e informações sobre bugs.

Obrigado.

que bom bem interesante…

Bela iniciativa!
Talvez fosse interessante comentar um pouco sobre a performance do framework, comparar a permformance de consultas em critéria, RQL e, até mesmo, chamadas de reflexão nativa da linguagem, acho que seria bem interessante!
Existem testes unitários? integrados? qual a cobertura?
No mais, tenho que dizer que a idéia e a forma como abstrairam as consultas e reflexões ficou muito simples, pouco verbosa e de fácil utilização.
Parabéns! :wink:

Opa,

Também sou co-autor do Reflection-dsl e respondendo a suas perguntas, Paulo, temos o seguinte:

O projeto foi desenvolvido com BDD/TDD (Behavior Driven Development)/(Test Driven Development), de forma que foi natural atingir alta cobertura de testes.
Medindo a cobertura com plugin do Eclipse (Emma), temos algo em torno de 90% de linha de cobertura. Provavelmente seria maior se retirássemos as exceções da contagem.
Ah, estes são testes unitários.

Em relação à performance, os testes foram feitos de maneira bastante simples, comparando chamadas nativas, via reflection direto, via Introspector, via Criterion e também por RQL.
Rodamos 130.000 vezes, e os resultados foram algo assim no meu humilde computador:
1 - Chamadas nativas - desprezíveis 4 milisegundos
2 - Reflection direto: 318 milisegundos
3 - Instrospector: 649 milisegundos
4 - Criterion: 472 milisegundos
5 - RQL: 304 milisegundos

Os dois últimos são mais rápidos que o Introspector pois fazem uso de cache, o RQL é um pouco mais performático pois consegue fazer melhor uso do cache.

Ah, a URL é http://code.google.com/p/reflection-dsl/

Hmm, muito bom. Conheci o projeto através da dependencia que o vraptor possui dele. Acabei lendo sobre, gostei e hoje estou usando em meus projetos. Parabéns a equipe.

Uma coisa que eu achei que daria para fazer é invocar um método passando o argumento como String sendo que o parametro do método é Long, por exemplo, e ele fazer o set correto. No meu caso não foi possível. Minha única sugestão é essa mesmo.

De resto, framework excelente ,já me ajudou muito.

Garcia, acho q vc está confundindo com o projeto Mirror da Caelun.

É um projeto q se assemelha ao nosso na parte DSL, mas hoje não conta com as demais APIs.

Abraços!

Parabéns pelo projeto!

[quote=leonardo.campos]Garcia, acho q vc está confundindo com o projeto Mirror da Caelun.

É um projeto q se assemelha ao nosso na parte DSL, mas hoje não conta com as demais APIs.

Abraços![/quote]

Xiii :oops:, mas que gafe, hehehehe.

Muito bom! Acho q vou tirar muito proveito disto no CajuScript!

Vou fazer testes de performance no CajuScript mudando o reflection direto que faço pelo Reflection-DSL, espero conseguir boas melhorias :stuck_out_tongue:

Gostei do tamanho do .jar… menos de 90kb, excelente! Meu objetivo no CajuScript também é não ter dependências, e se for preciso, é ter a menor e mais leve possível, e o Reflection-DSL vem a calhar.

Parabéns pelo projecto, dois comunico os resultados dos meus testes, gracias :wink:

Bacana, espero receber os resultados.

Ah, coloquei alguns exemplos no wiki do projeto.
Se vc desenvolver algum interessante me manda que eu coloco lá como contribuicao sua (fora o agradecimento :wink: )

Wow, muito bom.

Parabéns pelo release.

Valeu, brother.

Ah, eduveks, tava dando uma olhada no projeto CajuScript parece bem legal. Vou dar uma olhada com mais carinho no fim de semana!