From: Leif Åstrand Date: Thu, 22 Dec 2011 10:53:55 +0000 (+0200) Subject: Remove @ClientWidget for Root X-Git-Tag: 7.0.0.alpha1~24 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=781f3e355718fdfd9fdb5fd2f1d8a9b3eb216483;p=vaadin-framework.git Remove @ClientWidget for Root 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. --- diff --git a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java index d6c53a2da6..91c15df5b2 100644 --- a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java +++ b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java @@ -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 class1) { + if (Root.class == class1) { + return true; + } try { return class1.isAnnotationPresent(ClientWidget.class); } catch (NoClassDefFoundError e) { diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java b/src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java index b4fe92d3b7..ae744aa4f8 100644 --- a/src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java +++ b/src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java @@ -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) c); // System.out.println("Found paintable " + fullclassName); } else if (c.getAnnotation(ClientCriterion.class) != null) { diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java index c1f9134e7b..d20ac42812 100644 --- a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java +++ b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java @@ -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 class1 = iterator.next(); - ClientWidget annotation = class1.getAnnotation(ClientWidget.class); - - if (typeOracle.findType(annotation.value().getName()) == null) { + Class 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 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> widgetsWithInstantiator = new HashSet>(); for (Class class1 : paintablesHavingWidgetAnnotation) { - ClientWidget annotation = class1.getAnnotation(ClientWidget.class); - Class clientClass = annotation - .value(); + Class clientClass = getClientClass(class1); if(widgetsWithInstantiator.contains(clientClass)) { continue; } @@ -357,9 +357,7 @@ public class WidgetMapGenerator extends Generator { .println("fullyQualifiedName = fullyQualifiedName.intern();"); for (Class class1 : paintablesHavingWidgetAnnotation) { - ClientWidget annotation = class1.getAnnotation(ClientWidget.class); - Class clientClass = annotation - .value(); + Class 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 getClientClass( + Class class1) { + Class clientClass; + if (Root.class == class1) { + clientClass = VView.class; + } else { + ClientWidget annotation = class1.getAnnotation(ClientWidget.class); + clientClass = annotation.value(); + } + return clientClass; + } } diff --git a/src/com/vaadin/ui/Root.java b/src/com/vaadin/ui/Root.java index 4998baf90f..121ff9adaf 100644 --- a/src/com/vaadin/ui/Root.java +++ b/src/com/vaadin/ui/Root.java @@ -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 {