Export to GitHub

google-web-toolkit - issue #6693

[GWTD] Support for custom property-providers


Posted on Aug 16, 2011 by Grumpy Lion

Found in GWT Release:

GWT 2.4.0beta GWT Designer 2.3.4r36

Encountered on OS / Browser (e.g. WinXP, IE6-7, FF3):

Windows 7 x64 Eclipse 3.6

Detailed description (please be as specific as possible):

Use a @UiField and let UiBinder use GWT.create(SomeInterface.class) to create a concrete instance via deferred binding. When using custom property-provider, like form factor detection, GWT Designer is unable to get value of property 'formfactor'. http://code.google.com/p/google-web-toolkit/source/browse/trunk/samples/mobilewebapp/src/com/google/gwt/sample/mobilewebapp/FormFactor.gwt.xml?r=10041

Shortest code snippet which demonstrates issue (please indicate where actual result differs from expected result):

When switching to design view it should compile with the default permutation (desktop).

replace-with class="com.example.client.DesktopProvider"> <when-type-is class="com.example.client.PropertyProvider" /> </replace-with>

&lt;replace-with  class=&quot;com.example.client.MobileProvider&quot;&gt;
    &lt;when-type-is class=&quot;com.example.client.PropertyProvider&quot; /&gt;
    &lt;any&gt;
        &lt;when-property-is name=&quot;formfactor&quot; value=&quot;androidmobile&quot;/&gt;
        &lt;when-property-is name=&quot;formfactor&quot; value=&quot;iosmobile&quot;/&gt;
    &lt;/any&gt;
&lt;/replace-with&gt;

&lt;replace-with  class=&quot;com.example.client.TabletProvider&quot;&gt;
    &lt;when-type-is class=&quot;com.example.client.PropertyProvider&quot; /&gt;
    &lt;any&gt;
        &lt;when-property-is name=&quot;formfactor&quot; value=&quot;androidtablet&quot;/&gt;
        &lt;when-property-is name=&quot;formfactor&quot; value=&quot;iostablet&quot;/&gt;
    &lt;/any&gt;
&lt;/replace-with&gt;

Workaround if you have one: Comment permutations rules that depend on property-provider (e.g. FormFactor).

Links to relevant GWT Developer Forum posts: http://groups.google.com/group/google-web-toolkit/browse_thread/thread/6ff3c16ff26e09af?pli=1

Attachments

Comment #1

Posted on Aug 16, 2011 by Happy Lion

(No comment was entered for this change.)

Comment #2

Posted on Jan 24, 2012 by Massive Lion

Same problem here.

Comment #3

Posted on Feb 13, 2012 by Happy Rhino

I have the same problem.

Comment #4

Posted on Feb 16, 2012 by Happy Lion

Fixed in trunk. Now GWT Designer can run "property-provider" scripts from gwt.xml files to define property value. This allows for example using mGWT.

Attachments

Comment #5

Posted on Feb 16, 2012 by Swift Panda

very nice. Thank you very much!

Comment #6

Posted on Jul 25, 2012 by Happy Rhino

I have UIBinder code like this

    <mgwt:LayoutPanel>
            <mgwt:HeaderPanel>
                    <mgwt:center>
                            <g:HTML ui:field="center"></g:HTML>
                    </mgwt:center>
            </mgwt:HeaderPanel>

            <mgwt:ScrollPanel scrollingEnabledX="false">
                    <g:FlowPanel>


                            <mgwt:RoundPanel>
                                    <mgwt:MTextBox ui:field="name"></mgwt:MTextBox>
                            </mgwt:RoundPanel>
                            <mgwt:Button ui:field="editButton" text="edit"></mgwt:Button>

                    </g:FlowPanel>

            </mgwt:ScrollPanel>

    </mgwt:LayoutPanel>

I am still facing the same problem. Using GWT 2.4.0, GWT Designer 2.6, Windows Builder 1.5 ? Could you please help me with this ?

Comment #7

Posted on Jul 25, 2012 by Happy Rhino

Just for details adding stack trace :

Internal Error encountered unexpected internal error.

This could be caused by a bug or by a misconfiguration issue, conflict, partial update, etc.

org.mvel2.PropertyAccessException: unable to resolve method: com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetInfo.getWidget() [arglength=0]

Show stack trace. Hide stack trace.

Stack trace: [Error: unable to resolve method: com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetInfo.getWidget() [arglength=0]] [Near : {... Unknown ....}] ^ [Line: 1, Column: 0] at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:929) at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:313) at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:136) at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:134) at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:37) at org.mvel2.ast.AssignmentNode.getReducedValueAccelerated(AssignmentNode.java:90) at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85) at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:103) at org.mvel2.MVEL.executeExpression(MVEL.java:1069) at org.eclipse.wb.internal.core.model.util.ScriptUtils.evaluate(ScriptUtils.java:146) at org.eclipse.wb.internal.core.model.util.ScriptUtils.evaluate(ScriptUtils.java:85) at com.google.gdt.eclipse.designer.model.widgets.support.UIObjectUtils.executeScript(UIObjectUtils.java:441) at com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetTopBoundsSupport.invokeSizeScript(WidgetTopBoundsSupport.java:126) at com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetTopBoundsSupport.applySizeUsingScript(WidgetTopBoundsSupport.java:111) at com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetTopBoundsSupport.doApply(WidgetTopBoundsSupport.java:84) at com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetTopBoundsSupport.apply(WidgetTopBoundsSupport.java:63) at org.eclipse.wb.internal.core.xml.model.AbstractComponentInfo.refresh_afterCreate(AbstractComponentInfo.java:255) at com.google.gdt.eclipse.designer.uibinder.model.widgets.UIObjectInfo.refresh_afterCreate(UIObjectInfo.java:215) at org.eclipse.wb.core.model.ObjectInfo.refreshCreate0(ObjectInfo.java:552) at org.eclipse.wb.core.model.ObjectInfo.access$0(ObjectInfo.java:546) at org.eclipse.wb.core.model.ObjectInfo$5$1.run(ObjectInfo.java:486) at org.eclipse.wb.internal.core.utils.execution.ExecutionUtils.runDesignTime(ExecutionUtils.java:139) at org.eclipse.wb.core.model.ObjectInfo$5.run(ObjectInfo.java:484) at org.eclipse.wb.core.model.ObjectInfo.execRefreshOperation(ObjectInfo.java:514) at org.eclipse.wb.core.model.ObjectInfo.refresh(ObjectInfo.java:482) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.internal_refreshGEF(XmlDesignPage.java:459) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.access$2(XmlDesignPage.java:443) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage$7$1.run(XmlDesignPage.java:417) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:180) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4683) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage$7.run(XmlDesignPage.java:414) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:507) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.internal_refreshGEF_withProgress(XmlDesignPage.java:435) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.internal_refreshGEF(XmlDesignPage.java:388) at org.eclipse.wb.internal.core.xml.editor.UndoManager.refreshDesignerEditor(UndoManager.java:252) at org.eclipse.wb.internal.core.xml.editor.UndoManager.activate(UndoManager.java:85) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.setActive(XmlDesignPage.java:171) at org.eclipse.wb.internal.core.xml.editor.AbstractXmlEditor.pageChange(AbstractXmlEditor.java:651) at org.eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.java:290) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:774) at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:2746) at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1433) at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:257) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) at org.eclipse.equinox.launcher.Main.run(Main.java:1410) at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

Full context stack trace: [Error: unable to resolve method: com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetInfo.getWidget() [arglength=0]] [Near : {... Unknown ....}] ^ [Line: 1, Column: 0] at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:929) at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:313) at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.optimizeAccessor(ReflectiveAccessorOptimizer.java:136) at org.mvel2.ast.ASTNode.getReducedValueAccelerated(ASTNode.java:134) at org.mvel2.compiler.ExecutableAccessor.getValue(ExecutableAccessor.java:37) at org.mvel2.ast.AssignmentNode.getReducedValueAccelerated(AssignmentNode.java:90) at org.mvel2.MVELRuntime.execute(MVELRuntime.java:85) at org.mvel2.compiler.CompiledExpression.getValue(CompiledExpression.java:103) at org.mvel2.MVEL.executeExpression(MVEL.java:1069) at org.eclipse.wb.internal.core.model.util.ScriptUtils.evaluate(ScriptUtils.java:146) at org.eclipse.wb.internal.core.model.util.ScriptUtils.evaluate(ScriptUtils.java:85) at com.google.gdt.eclipse.designer.model.widgets.support.UIObjectUtils.executeScript(UIObjectUtils.java:441) at com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetTopBoundsSupport.invokeSizeScript(WidgetTopBoundsSupport.java:126) at com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetTopBoundsSupport.applySizeUsingScript(WidgetTopBoundsSupport.java:111) at com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetTopBoundsSupport.doApply(WidgetTopBoundsSupport.java:84) at com.google.gdt.eclipse.designer.uibinder.model.widgets.WidgetTopBoundsSupport.apply(WidgetTopBoundsSupport.java:63) at org.eclipse.wb.internal.core.xml.model.AbstractComponentInfo.refresh_afterCreate(AbstractComponentInfo.java:255) at com.google.gdt.eclipse.designer.uibinder.model.widgets.UIObjectInfo.refresh_afterCreate(UIObjectInfo.java:215) at org.eclipse.wb.core.model.ObjectInfo.refreshCreate0(ObjectInfo.java:552) at org.eclipse.wb.core.model.ObjectInfo.access$0(ObjectInfo.java:546) at org.eclipse.wb.core.model.ObjectInfo$5$1.run(ObjectInfo.java:486) at org.eclipse.wb.internal.core.utils.execution.ExecutionUtils.runDesignTime(ExecutionUtils.java:139) at org.eclipse.wb.core.model.ObjectInfo$5.run(ObjectInfo.java:484) at org.eclipse.wb.core.model.ObjectInfo.execRefreshOperation(ObjectInfo.java:514) at org.eclipse.wb.core.model.ObjectInfo.refresh(ObjectInfo.java:482) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.internal_refreshGEF(XmlDesignPage.java:459) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.access$2(XmlDesignPage.java:443) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage$7$1.run(XmlDesignPage.java:417) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:180) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4683) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage$7.run(XmlDesignPage.java:414) at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464) at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372) at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:507) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.internal_refreshGEF_withProgress(XmlDesignPage.java:435) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.internal_refreshGEF(XmlDesignPage.java:388) at org.eclipse.wb.internal.core.xml.editor.UndoManager.refreshDesignerEditor(UndoManager.java:252) at org.eclipse.wb.internal.core.xml.editor.UndoManager.activate(UndoManager.java:85) at org.eclipse.wb.internal.core.xml.editor.XmlDesignPage.setActive(XmlDesignPage.java:171) at org.eclipse.wb.internal.core.xml.editor.AbstractXmlEditor.pageChange(AbstractXmlEditor.java:651) at org.eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.java:290) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:774) at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:2746) at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1433) at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:257) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) at org.eclipse.equinox.launcher.Main.run(Main.java:1410) at org.eclipse.equinox.launcher.Main.main(Main.java:1386)

Status: Fixed

Labels:
Category-Designer