From 781f3e355718fdfd9fdb5fd2f1d8a9b3eb216483 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Thu, 22 Dec 2011 12:53:55 +0200 Subject: [PATCH] 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. --- .../terminal/gwt/server/JsonPaintTarget.java | 4 +++ .../gwt/widgetsetutils/ClassPathExplorer.java | 3 +- .../widgetsetutils/WidgetMapGenerator.java | 32 ++++++++++++------- src/com/vaadin/ui/Root.java | 3 +- 4 files changed, 29 insertions(+), 13 deletions(-) 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 { -- 2.39.5