diff options
author | Artur Signell <artur@vaadin.com> | 2012-08-29 12:29:14 +0300 |
---|---|---|
committer | Artur Signell <artur@vaadin.com> | 2012-08-29 12:29:20 +0300 |
commit | f5f73df7937d6fc8008ae34cc5a7d39e60de266b (patch) | |
tree | 028a4ff386f0fdc8b166274138f376957ef0f0f2 /client-compiler/src/com/vaadin/server/widgetsetutils/metadata/WidgetInitVisitor.java | |
parent | 63595217a224b9fbc6de4b8bdc2e6b317e0558d5 (diff) | |
download | vaadin-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.java | 73 |
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); + } + } + } + } +} |