Reviewers: sonnyf_google.com,
Description:
Attributes required by @UiConstructor are no longer enforced when a
field is created via @UiField(provided=true)
Review by: [email protected]
Please review this at http://gwt-code-reviews.appspot.com/690801/show
Affected files:
M user/src/com/google/gwt/uibinder/elementparsers/BeanParser.java
M user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
M user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
Index: user/src/com/google/gwt/uibinder/elementparsers/BeanParser.java
===================================================================
--- user/src/com/google/gwt/uibinder/elementparsers/BeanParser.java
(revision 8377)
+++ user/src/com/google/gwt/uibinder/elementparsers/BeanParser.java
(working copy)
@@ -25,6 +25,7 @@
import com.google.gwt.uibinder.rebind.XMLAttribute;
import com.google.gwt.uibinder.rebind.XMLElement;
import com.google.gwt.uibinder.rebind.messages.AttributeMessage;
+import com.google.gwt.uibinder.rebind.model.OwnerField;
import com.google.gwt.uibinder.rebind.model.OwnerFieldClass;
import java.util.Collection;
@@ -57,16 +58,25 @@
final OwnerFieldClass ownerFieldClass =
OwnerFieldClass.getFieldClass(type,
writer.getLogger());
- // See if there's a factory method
- JAbstractMethod creator =
writer.getOwnerClass().getUiFactoryMethod(type);
- if (creator == null) {
- // If not, see if there's a @UiConstructor
- creator = ownerFieldClass.getUiConstructor();
- }
-
- if (creator != null) {
- for (JParameter param : creator.getParameters()) {
- unfilledRequiredParams.put(param.getName(), param.getType());
+ /*
+ * Handle @UiFactory and @UiConstructor, but only if the user
+ * hasn't provided an instance via @UiField(provided = true)
+ */
+
+ JAbstractMethod creator = null;
+ OwnerField uiField = writer.getOwnerClass().getUiField(fieldName);
+ if ((uiField == null) || (!uiField.isProvided())) {
+ // See if there's a factory method
+ creator = writer.getOwnerClass().getUiFactoryMethod(type);
+ if (creator == null) {
+ // If not, see if there's a @UiConstructor
+ creator = ownerFieldClass.getUiConstructor();
+ }
+
+ if (creator != null) {
+ for (JParameter param : creator.getParameters()) {
+ unfilledRequiredParams.put(param.getName(), param.getType());
+ }
}
}
Index: user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
===================================================================
--- user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
(revision 8377)
+++ user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.java
(working copy)
@@ -109,6 +109,7 @@
@UiField SpanElement trimmedMessage;
@UiField NeedlesslyAnnotatedLabel needlessLabel;
@UiField AnnotatedStrictLabel strictLabel;
+ @UiField(provided=true) AnnotatedStrictLabel providedStrictLabel = new
AnnotatedStrictLabel("likewise");
@UiField AnnotatedStrictLabel translatedStrictLabel;
@UiField StrictLabel veryStrictLabel;
@UiField StrictLabel translatedVeryStrictLabel;
Index: user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
===================================================================
--- user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
(revision 8377)
+++ user/test/com/google/gwt/uibinder/test/client/WidgetBasedUi.ui.xml
(working copy)
@@ -510,6 +510,7 @@
</demo:StrictLabel></p>
<p><demo:NeedlesslyAnnotatedLabel ui:field="needlessLabel"
text="Sometimes people do things they don't need to do. Don't
punish them."/></p>
+ <demo:AnnotatedStrictLabel
ui:field="providedStrictLabel">ditto</demo:AnnotatedStrictLabel>
<demo:FooLabel ui:field='theFoo' pojo="{values.pojo}"/>
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors