Hi Sumit, The GWT.getTypeName() has been deprecated in favor of getClass().getName(). I was thinking about... the mechanism of binding that I implemented is based on annotations... based on what I know the annotations are stripped out by the compiler... is it possible that the compiler remove them before the call to my generator??
On Mon, Mar 30, 2009 at 9:49 PM, Sumit Chandel <[email protected]>wrote: > Hi Marcelo, > Something just struck me. What happens if you use GWT.getTypeName(binded) > instead of label.setText(binded.getClass().getName())? > > Hope that helps, > -Sumit Chandel > > On Thu, Mar 26, 2009 at 6:42 PM, Marcelo Emanoel B. Diniz < > [email protected]> wrote: > >> >> Hi Sumit here are the generator rule and the generator class: >> >> rule: >> <generate-with >> class="br.com.gwt.symbiosis.rebind.generator.BoundModelGenerator"> >> <when-type-assignable >> class="br.com.gwt.symbiosis.client.bind.BindingModel" /> >> </generate-with> >> >> <generate-with >> class="br.com.gwt.symbiosis.rebind.generator.BoundViewGenerator"> >> <when-type-assignable >> class="br.com.gwt.symbiosis.client.bind.BindingView" /> >> </generate-with> >> >> View generator class: >> public class BoundViewGenerator extends Generator { >> >> private static final String MODEL_INTERFACE = >> "br.com.gwt.symbiosis.client.bind.BindingModel"; >> private static final String SOURCES_PROPERTY_CHANGES = >> "br.com.gwt.symbiosis.client.event.SourcesPropertyChanges"; >> >> public String generate(TreeLogger logger, GeneratorContext context, >> String typeName) throws UnableToCompleteException { >> >> TypeOracle oracle = context.getTypeOracle(); >> JClassType type = oracle.findType(typeName); >> JClassType modelType = oracle.findType(MODEL_INTERFACE); >> >> BoundModelClass modelClass = new BoundModelClass(type); >> modelClass.setModelType(modelType); >> BindTypeManager bindManager = >> BindTypeManager.getInstance(); >> >> for(JField field : type.getFields()){ >> JClassType fieldClass = >> field.getType().isClassOrInterface(); >> >> for(String className : >> bindManager.getAvailableTypes()){ >> JClassType bindClass = >> oracle.findType(className); >> if(fieldClass.isAssignableTo(bindClass)){ >> for(ListenerTemplate template : >> bindManager.getTemplatesForType >> (className)){ >> >> modelClass.associateFieldListener(field, template); >> } >> } >> } >> } >> >> String packageName = modelClass.getPackageName(); >> String newLine = System.getProperty("line.separator"); >> >> String finalViewClassName = >> "Bound_"+modelClass.getClassName() >> +"_View"; >> PrintWriter printer = context.tryCreate(logger, >> packageName, >> finalViewClassName); >> >> if (printer == null){ >> System.out.println("printer == null"); >> return null; >> } >> >> ClassSourceFileComposerFactory composer = null; >> composer = new ClassSourceFileComposerFactory(packageName, >> finalViewClassName); >> composer.setSuperclass(type.getSimpleSourceName()); >> composer.addImport(SOURCES_PROPERTY_CHANGES); >> >> SourceWriter sourceWriter = >> composer.createSourceWriter(context, >> printer); >> >> Bound_ViewTemplate template = >> Bound_ViewTemplate.create(newLine); >> System.out.println(template.generate(modelClass)); >> sourceWriter.println(template.generate(modelClass)); >> >> >> context.commit(logger, printer); >> >> return packageName + "." + finalViewClassName; >> } >> } >> >> Model generator class: >> >> public class BoundModelGenerator extends Generator { >> >> private static final String SOURCES_PROPERTY_CHANGES = >> "br.com.gwt.symbiosis.client.event.SourcesPropertyChanges"; >> private static final String PROPERTY_CHANGE_SUPPORT = >> "br.com.gwt.symbiosis.client.event.PropertyChangeSupport"; >> private static final String PROPERTY_CHANGE_LISTENER = >> "br.com.gwt.symbiosis.client.event.PropertyChangeListener"; >> private static final String BOUND_PREFIX = "Bound_"; >> >> public String generate(TreeLogger logger, GeneratorContext context, >> String typeName) throws UnableToCompleteException { >> >> TypeOracle oracle = context.getTypeOracle(); >> JClassType type = oracle.findType(typeName); >> >> BoundModelClass modelClass = new BoundModelClass(type); >> String generatedClass = new Bound_ModelTemplate().generate >> (modelClass); >> System.out.println(generatedClass); >> >> String packageName = modelClass.getPackageName(); >> String generatedClassName = >> BOUND_PREFIX+modelClass.getClassName(); >> >> PrintWriter printer = context.tryCreate(logger, >> packageName, >> generatedClassName); >> >> if (printer == null){ >> return null; >> } >> >> ClassSourceFileComposerFactory composer = null; >> composer = new ClassSourceFileComposerFactory(packageName, >> generatedClassName); >> >> composer.setSuperclass(type.getSimpleSourceName()); >> composer.addImplementedInterface(SOURCES_PROPERTY_CHANGES); >> composer.addImport(PROPERTY_CHANGE_LISTENER); >> composer.addImport(PROPERTY_CHANGE_SUPPORT); >> composer.addImport(SOURCES_PROPERTY_CHANGES); >> >> SourceWriter sourceWriter = composer.createSourceWriter >> (context, printer); >> sourceWriter.println(generatedClass); >> context.commit(logger, printer); >> return packageName + "." + generatedClassName; >> } >> } >> >> I'll put the code at the project's site: >> http://code.google.com/p/glue4gwt >> >> The strange thing is that when the compile button is pressed... the >> generator is called... but the code generated isn't used... >> anyway thanks for the help :) >> >> On Mar 24, 12:23 pm, Sumit Chandel <[email protected]> wrote: >> > Hi Marcelo, >> > It might help to post up the generator rule and especially the >> generate() >> > implementation that is being used to generate the FormView generated >> type. >> > My thought is that whatever is going on in there is depending on rules >> that >> > might not hold true in web mode. >> > >> > Cheers, >> > -Sumit Chandel >> > >> > On Thu, Mar 19, 2009 at 2:46 PM, Marcelo Emanoel B. Diniz < >> > >> > [email protected]> wrote: >> > >> > > this is my entry point >> > >> > > package br.com.gwt.symbiosis.client; >> > >> > > import br.com.gwt.symbiosis.client.mock.FormView; >> > >> > > import com.google.gwt.core.client.EntryPoint; >> > > import com.google.gwt.core.client.GWT; >> > > import com.google.gwt.user.client.ui.Label; >> > > import com.google.gwt.user.client.ui.RootPanel; >> > >> > > public class Symbiosis implements EntryPoint { >> > >> > > public void onModuleLoad() { >> > > FormView binded = GWT.create(FormView.class); >> > > Label label = new Label(); >> > > label.setText(binded.getClass().getName()); >> > > RootPanel.get().add(binded); >> > > RootPanel.get().add(label); >> > > } >> > > } >> > >> > > on hosted mode the label text is >> > > "br.com.gwt.symbiosis.client.mock.Bound_FormView_View" wich is in fact >> > > what is expected to be... >> > > but at web mode the label text is >> > > ''br.com.gwt.symbiosis.client.mock.FormView" which in turn is not what >> > > I need... and doesn't work as expected either... :( >> > >> > > by the way... there's no complain on the console.... >> > >> > > On Mar 19, 3:53 pm, Marcelo Emanoel <[email protected]> wrote: >> > > > Hi guys I have a problem with generators... I've manage to do 2 >> > > > generators and they work fine on hosted mode.... however they don't >> > > > work when I compile code to web mode :( What I'm trying to acomplish >> > > > is to build an API for binding... An important thing is that my >> > > > generators work on hosted mode and they are called when the code >> start >> > > > is compiled.... >> >> > > > > -- Marcelo Emanoel Bezerra Diniz ---------------------------------------------- Arquiteto de Software da Aptools - www.aptools.com.br GWT Brasil - www.gwt.com.br Sun Certified Java Programmer 5.0 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/Google-Web-Toolkit?hl=en -~----------~----~----~----~------~----~------~--~---
