]> source.dussan.org Git - vaadin-framework.git/commitdiff
Remove @ClientWidget for Root
authorLeif Åstrand <leif@vaadin.com>
Thu, 22 Dec 2011 10:53:55 +0000 (12:53 +0200)
committerLeif Åstrand <leif@vaadin.com>
Thu, 22 Dec 2011 10:54:07 +0000 (12:54 +0200)
The annotation causes problems when reading other annotations in
application servers with too eager classloaders. The annotation is also
useless as the client side widget for Root is hardcoded in the
widgetset.

src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java
src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java
src/com/vaadin/ui/Root.java

index d6c53a2da669edc6ca035c4e71190c4423aff6ca..91c15df5b20cccd6b0b77efe93fa27dd7c97276f 100644 (file)
@@ -37,6 +37,7 @@ import com.vaadin.ui.Alignment;
 import com.vaadin.ui.ClientWidget;
 import com.vaadin.ui.Component;
 import com.vaadin.ui.CustomLayout;
+import com.vaadin.ui.Root;
 
 /**
  * User Interface Description Language Target.
@@ -1038,6 +1039,9 @@ public class JsonPaintTarget implements PaintTarget {
     }
 
     private boolean hasClientWidgetMapping(Class<? extends Paintable> class1) {
+        if (Root.class == class1) {
+            return true;
+        }
         try {
             return class1.isAnnotationPresent(ClientWidget.class);
         } catch (NoClassDefFoundError e) {
index b4fe92d3b74dd75a696a20be45830735828686d4..ae744aa4f8823ec8e5d5500ee8495ff6629b5df4 100644 (file)
@@ -33,6 +33,7 @@ import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
 import com.vaadin.event.dd.acceptcriteria.ClientCriterion;
 import com.vaadin.terminal.Paintable;
 import com.vaadin.ui.ClientWidget;
+import com.vaadin.ui.Root;
 
 /**
  * Utility class to collect widgetset related information from classpath.
@@ -563,7 +564,7 @@ public class ClassPathExplorer {
 
             Class<?> c = Class.forName(fullclassName);
 
-            if (c.getAnnotation(ClientWidget.class) != null) {
+            if (c.getAnnotation(ClientWidget.class) != null || Root.class == c) {
                 paintables.add((Class<? extends Paintable>) c);
                 // System.out.println("Found paintable " + fullclassName);
             } else if (c.getAnnotation(ClientCriterion.class) != null) {
index c1f9134e7bb642858ee05ff050026afb76e525ec..d20ac428126147a4d00ed4bd2dd72043672e0d93 100644 (file)
@@ -26,6 +26,7 @@ import com.vaadin.terminal.Paintable;
 import com.vaadin.terminal.gwt.client.ui.VView;
 import com.vaadin.ui.ClientWidget;
 import com.vaadin.ui.ClientWidget.LoadStyle;
+import com.vaadin.ui.Root;
 
 /**
  * WidgetMapGenerator's are GWT generator to build WidgetMapImpl dynamically
@@ -161,12 +162,10 @@ public class WidgetMapGenerator extends Generator {
                 .iterator(); iterator.hasNext();) {
             Class<? extends Paintable> class1 = iterator.next();
 
-            ClientWidget annotation = class1.getAnnotation(ClientWidget.class);
-
-            if (typeOracle.findType(annotation.value().getName()) == null) {
+            Class<? extends com.vaadin.terminal.gwt.client.Paintable> clientClass = getClientClass(class1);
+            if (typeOracle.findType(clientClass.getName()) == null) {
                 // GWT widget not inherited
-                logger.log(Type.WARN, "Widget class "
-                        + annotation.value().getName()
+                logger.log(Type.WARN, "Widget class " + clientClass.getName()
                         + " was not found. The component " + class1.getName()
                         + " will not be included in the widgetset.");
                 iterator.remove();
@@ -225,6 +224,9 @@ public class WidgetMapGenerator extends Generator {
      *         the client side engine
      */
     protected LoadStyle getLoadStyle(Class<? extends Paintable> paintableType) {
+        if (Root.class == paintableType) {
+            return LoadStyle.EAGER;
+        }
         ClientWidget annotation = paintableType
                 .getAnnotation(ClientWidget.class);
         return annotation.loadStyle();
@@ -249,9 +251,7 @@ public class WidgetMapGenerator extends Generator {
         HashSet<Class<? extends com.vaadin.terminal.gwt.client.Paintable>> widgetsWithInstantiator = new HashSet<Class<? extends com.vaadin.terminal.gwt.client.Paintable>>();
         
         for (Class<? extends Paintable> class1 : paintablesHavingWidgetAnnotation) {
-            ClientWidget annotation = class1.getAnnotation(ClientWidget.class);
-            Class<? extends com.vaadin.terminal.gwt.client.Paintable> clientClass = annotation
-                    .value();
+            Class<? extends com.vaadin.terminal.gwt.client.Paintable> clientClass = getClientClass(class1);
             if(widgetsWithInstantiator.contains(clientClass)) {
                 continue;
             }
@@ -357,9 +357,7 @@ public class WidgetMapGenerator extends Generator {
                 .println("fullyQualifiedName = fullyQualifiedName.intern();");
 
         for (Class<? extends Paintable> class1 : paintablesHavingWidgetAnnotation) {
-            ClientWidget annotation = class1.getAnnotation(ClientWidget.class);
-            Class<? extends com.vaadin.terminal.gwt.client.Paintable> clientClass = annotation
-                    .value();
+            Class<? extends com.vaadin.terminal.gwt.client.Paintable> clientClass = getClientClass(class1);
             sourceWriter.print("if ( fullyQualifiedName == \"");
             sourceWriter.print(class1.getName());
             sourceWriter.print("\" ) { ensureInstantiator("
@@ -374,4 +372,16 @@ public class WidgetMapGenerator extends Generator {
         sourceWriter.println("}");
 
     }
+
+    private static Class<? extends com.vaadin.terminal.gwt.client.Paintable> getClientClass(
+            Class<? extends Paintable> class1) {
+        Class<? extends com.vaadin.terminal.gwt.client.Paintable> clientClass;
+        if (Root.class == class1) {
+            clientClass = VView.class;
+        } else {
+            ClientWidget annotation = class1.getAnnotation(ClientWidget.class);
+            clientClass = annotation.value();
+        }
+        return clientClass;
+    }
 }
index 4998baf90f5d96b84c6683f7a6886bf3e8d6366e..121ff9adafb4bd789c69a5ebdace1cb1ea429124 100644 (file)
@@ -71,7 +71,8 @@ import com.vaadin.ui.Window.CloseListener;
  * 
  * @since 7.0
  */
-@ClientWidget(VView.class)
+// @ClientWidget(VView.class) - Can't have annotation because of eager
+// classloaders in application servers and hard coded logic in client side code
 public abstract class Root extends AbstractComponentContainer implements
         Action.Container, Action.Notifier {