http://tawus.wordpress.com/2011/05/22/meeting-plastic-v-a-method-shadow-builder/

Le 23/05/14 00:40, Jigar Joshi a écrit :
Thank you,

the closest implementation I found is here

PlasticManager plasticManager =
PlasticManager.withContextClassLoader().create();
         PlasticClass plasticClass =
plasticManager.createProxyTransformation(serviceInterface,
null).getPlasticClass();
         PlasticField plasticField =
plasticClass.introduceField(IProvider.class, "_creator");
         PlasticProxyFactory factory = new
PlasticProxyFactoryImpl(plasticManager, log);

         MethodDescription methodDescription = new
MethodDescription(serviceInterface.getClass().getName(), "_scopeInstance",
null, null);
         plasticClass.introduceMethod(methodDescription);

this doesn't help me to create class instance on the fly though, it is
creates PlasticClass also I didn't find flexibility to specify field access
specifiers

I must be looking at wrong set of class it seems, any thoughts ?





On Tue, May 20, 2014 at 12:42 AM, Lance Java <lance.j...@googlemail.com>wrote:

Tapestry has switched to plastic for its byte code magic. Currently,
plastic isn't well documented. I find that the best documentation currently
is the test cases. Perhaps you can find your answer here:


https://github.com/apache/tapestry-5/tree/master/plastic/src/test/groovy/org/apache/tapestry5/plastic
  On 19 May 2014 23:46, "Jigar Joshi" <jiga...@gmail.com> wrote:

Hello

​with tapestry 5.3.4 and java 7 with use of
org.apache.tapestry5.ioc.services.ClassFactory



     private Class<?> createProxyClass(ServiceResources resources) {
         Class<?> serviceInterface = resources.getServiceInterface();

         ClassFab cf = classFactory.newClass(serviceInterface);

         // add field
         cf.addField("_creator", Modifier.PRIVATE | Modifier.FINAL,
SomeClass.class);

         // Constructor takes a ServiceCreator
         cf.addConstructor(new Class[] { SomeClass.class }, null,
"_creator
= $1;");

         // add method
         String body = format("return (%s) _creator.get();",
serviceInterface.getName());
         MethodSignature sig = new MethodSignature(serviceInterface,
SCOPE_METHOD_NAME, null, null);
         cf.addMethod(Modifier.PRIVATE, sig, body);
         String toString = format("<Scoped Proxy for scope(%s): %s(%s)>",
scope, resources.getServiceId(),
                 serviceInterface.getName());

         cf.proxyMethodsToDelegate(serviceInterface, SCOPE_METHOD_NAME +
"()", toString);

         return cf.createClass();
     }





with tapestry 5.4-beta3 this class has been removed (it was depricated)

I played around a little bit to find related implementation in new
replaced
class

org.apache.tapestry5.ioc.services.PlasticProxyFactory

couldn't find it offhand, how to achieve same thing with tapestry 5.4 ?

Thanks!
Jigar





---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tapestry.apache.org
For additional commands, e-mail: dev-h...@tapestry.apache.org

Reply via email to