aboutsummaryrefslogtreecommitdiffstats
path: root/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
diff options
context:
space:
mode:
authorArtur Signell <artur@vaadin.com>2012-08-29 12:29:14 +0300
committerArtur Signell <artur@vaadin.com>2012-08-29 12:29:20 +0300
commitf5f73df7937d6fc8008ae34cc5a7d39e60de266b (patch)
tree028a4ff386f0fdc8b166274138f376957ef0f0f2 /client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
parent63595217a224b9fbc6de4b8bdc2e6b317e0558d5 (diff)
downloadvaadin-framework-f5f73df7937d6fc8008ae34cc5a7d39e60de266b.tar.gz
vaadin-framework-f5f73df7937d6fc8008ae34cc5a7d39e60de266b.zip
Renamed com.vaadin.terminal.gwt.widgetsetutils -> com.vaadin.server.widgetsetutils (#9431)
Diffstat (limited to 'client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java')
-rw-r--r--client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java73
1 files changed, 73 insertions, 0 deletions
diff --git a/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
new file mode 100644
index 0000000000..fbbabe084d
--- /dev/null
+++ b/client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java
@@ -0,0 +1,73 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.server.widgetsetutils.metadata;
+
+import java.util.Collection;
+
+import com.google.gwt.core.ext.TreeLogger;
+import com.google.gwt.core.ext.TreeLogger.Type;
+import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.core.ext.typeinfo.JClassType;
+import com.google.gwt.core.ext.typeinfo.JMethod;
+import com.vaadin.client.ui.AbstractComponentConnector;
+import com.vaadin.shared.annotations.DelegateToWidget;
+
+public class WidgetInitVisitor extends TypeVisitor {
+
+ @Override
+ public void visitConnector(TreeLogger logger, JClassType type,
+ ConnectorBundle bundle) throws UnableToCompleteException {
+ if (ConnectorBundle.isConnectedComponentConnector(type)) {
+ JClassType createWidgetClass = findInheritedMethod(type,
+ "createWidget").getEnclosingType();
+ boolean createWidgetOverridden = !createWidgetClass
+ .getQualifiedSourceName()
+ .equals(AbstractComponentConnector.class.getCanonicalName());
+ if (createWidgetOverridden) {
+ // Don't generate if createWidget is already overridden
+ return;
+ }
+
+ JMethod getWidget = findInheritedMethod(type, "getWidget");
+ bundle.setNeedsReturnType(type, getWidget);
+
+ JClassType widgetType = getWidget.getReturnType().isClass();
+ bundle.setNeedsGwtConstructor(widgetType);
+
+ JMethod getState = findInheritedMethod(type, "getState");
+ JClassType stateType = getState.getReturnType().isClass();
+
+ Collection<Property> properties = bundle.getProperties(stateType);
+ for (Property property : properties) {
+ DelegateToWidget delegateToWidget = property
+ .getAnnotation(DelegateToWidget.class);
+ if (delegateToWidget != null) {
+ bundle.setNeedsDelegateToWidget(property);
+ String methodName = DelegateToWidget.Helper
+ .getDelegateTarget(property.getName(),
+ delegateToWidget.value());
+ JMethod delegatedSetter = findInheritedMethod(widgetType,
+ methodName, property.getPropertyType());
+ if (delegatedSetter == null) {
+ logger.log(
+ Type.ERROR,
+ widgetType.getName()
+ + "."
+ + methodName
+ + "("
+ + property.getPropertyType()
+ .getSimpleSourceName()
+ + ") required by @DelegateToWidget for "
+ + stateType.getName() + "."
+ + property.getName()
+ + " can not be found.");
+ throw new UnableToCompleteException();
+ }
+ bundle.setNeedsInvoker(widgetType, delegatedSetter);
+ }
+ }
+ }
+ }
+}