A ComponentConnector must override either getWidget or createWidget for the framework to know the type of the component's widget. Similarly either getRenderer och createRenderer must be overridden for AbstractRendererConnector. Prior to this patch, the compilation succeeded when critical methods were missing - the user just got various hard-to-debug issues when the broken connector was used. Change-Id: I6ec07e2f1c1b15047802e64208485b1d999c0aeetags/7.6.0.beta2
} | } | ||||
private static void doRendererType(TreeLogger logger, JClassType type, | private static void doRendererType(TreeLogger logger, JClassType type, | ||||
ConnectorBundle bundle) { | |||||
ConnectorBundle bundle) throws UnableToCompleteException { | |||||
// The class in which createRenderer is implemented | // The class in which createRenderer is implemented | ||||
JClassType createRendererClass = ConnectorBundle.findInheritedMethod( | JClassType createRendererClass = ConnectorBundle.findInheritedMethod( | ||||
type, "createRenderer").getEnclosingType(); | type, "createRenderer").getEnclosingType(); | ||||
JMethod getRenderer = ConnectorBundle.findInheritedMethod(type, | JMethod getRenderer = ConnectorBundle.findInheritedMethod(type, | ||||
"getRenderer"); | "getRenderer"); | ||||
if (getRenderer.getEnclosingType().getQualifiedSourceName() | |||||
.equals(AbstractRendererConnector.class.getCanonicalName())) { | |||||
logger.log(Type.ERROR, type.getQualifiedSourceName() | |||||
+ " must override either createRenderer or getRenderer"); | |||||
throw new UnableToCompleteException(); | |||||
} | |||||
JClassType rendererType = getRenderer.getReturnType().isClass(); | JClassType rendererType = getRenderer.getReturnType().isClass(); | ||||
bundle.setNeedsGwtConstructor(rendererType); | bundle.setNeedsGwtConstructor(rendererType); |
// Needs GWT constructor if createWidget is not overridden | // Needs GWT constructor if createWidget is not overridden | ||||
if (createWidgetClass.getQualifiedSourceName().equals( | if (createWidgetClass.getQualifiedSourceName().equals( | ||||
AbstractComponentConnector.class.getCanonicalName())) { | AbstractComponentConnector.class.getCanonicalName())) { | ||||
if (getWidget | |||||
.getEnclosingType() | |||||
.getQualifiedSourceName() | |||||
.equals(AbstractComponentConnector.class | |||||
.getCanonicalName())) { | |||||
logger.log(Type.ERROR, type.getQualifiedSourceName() | |||||
+ " must override either createWidget or getWidget"); | |||||
throw new UnableToCompleteException(); | |||||
} | |||||
bundle.setNeedsGwtConstructor(widgetType); | bundle.setNeedsGwtConstructor(widgetType); | ||||
// Also needs widget type to find the right GWT constructor | // Also needs widget type to find the right GWT constructor |