]> source.dussan.org Git - vaadin-framework.git/commitdiff
Show better feedback if renderer connector is not parameterized (#13334)
authorLeif Åstrand <leif@vaadin.com>
Thu, 4 Dec 2014 19:38:09 +0000 (21:38 +0200)
committerVaadin Code Review <review@vaadin.com>
Sun, 7 Dec 2014 18:49:17 +0000 (18:49 +0000)
Change-Id: Ica9281e254938443576fcd3c61197a50ceaa2d2e

client-compiler/src/com/vaadin/server/widgetsetutils/metadata/RendererVisitor.java

index 6c6d6d116c579de2d8ed4d611cc595cd14d2ce69..4c356cda7f90e048853c3f270dc8938d4db1ba35 100644 (file)
@@ -17,8 +17,10 @@ package com.vaadin.server.widgetsetutils.metadata;
 
 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.google.gwt.core.ext.typeinfo.JParameterizedType;
 import com.google.gwt.core.ext.typeinfo.JType;
 import com.vaadin.client.ui.grid.renderers.AbstractRendererConnector;
 
@@ -43,7 +45,7 @@ public class RendererVisitor extends TypeVisitor {
 
     @Override
     public void visitConnector(TreeLogger logger, JClassType type,
-            ConnectorBundle bundle) {
+            ConnectorBundle bundle) throws UnableToCompleteException {
         if (ConnectorBundle.isConnectedRendererConnector(type)) {
             doRendererType(logger, type, bundle);
             doPresentationType(logger, type, bundle);
@@ -75,20 +77,31 @@ public class RendererVisitor extends TypeVisitor {
     }
 
     private void doPresentationType(TreeLogger logger, JClassType type,
-            ConnectorBundle bundle) {
-        JType presentationType = getPresentationType(type);
+            ConnectorBundle bundle) throws UnableToCompleteException {
+        JType presentationType = getPresentationType(type, logger);
         bundle.setPresentationType(type, presentationType);
 
         logger.log(Type.DEBUG, "Presentation type of " + type + " is "
                 + presentationType);
     }
 
-    private static JType getPresentationType(JClassType type) {
+    private static JType getPresentationType(JClassType type, TreeLogger logger)
+            throws UnableToCompleteException {
         JClassType originalType = type;
         while (type != null) {
             if (type.getQualifiedBinaryName().equals(
                     AbstractRendererConnector.class.getName())) {
-                return type.isParameterized().getTypeArgs()[0];
+                JParameterizedType parameterized = type.isParameterized();
+                if (parameterized == null) {
+                    logger.log(
+                            Type.ERROR,
+                            type.getQualifiedSourceName()
+                                    + " must define the generic parameter of the inherited "
+                                    + AbstractRendererConnector.class
+                                            .getSimpleName());
+                    throw new UnableToCompleteException();
+                }
+                return parameterized.getTypeArgs()[0];
             }
             type = type.getSuperclass();
         }