From: Artur Signell Date: Mon, 2 Apr 2012 21:08:53 +0000 (+0300) Subject: Generator to ease initialization of client to server rpc proxies X-Git-Tag: 7.0.0.alpha2~152 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=dab7c9fa82c4d9301e00e1c24e46890fa130c7e5;p=vaadin-framework.git Generator to ease initialization of client to server rpc proxies --- diff --git a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml index db273271e9..854464f1ee 100644 --- a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml +++ b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml @@ -54,6 +54,13 @@ class="com.vaadin.terminal.gwt.client.communication.ServerRpc" /> + + + + + diff --git a/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java b/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java new file mode 100644 index 0000000000..7742d82441 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java @@ -0,0 +1,34 @@ +package com.vaadin.terminal.gwt.client.communication; + +import com.google.gwt.core.client.GWT; +import com.vaadin.terminal.gwt.client.ServerConnector; + +/** + * Class for creating proxy instances for Client to Server RPC. + * + * @since 7.0 + */ +public class RpcProxy { + + private static RpcProxyCreator impl = GWT.create(RpcProxyCreator.class); + + /** + * Create a proxy class for the given Rpc interface and assign it to the + * given connector. + * + * @param rpcInterface + * The rpc interface to construct a proxy for + * @param connector + * The connector this proxy is connected to + * @return A proxy class used for calling Rpc methods. + */ + public static T create(Class rpcInterface, + ServerConnector connector) { + return impl.create(rpcInterface, connector); + } + + public interface RpcProxyCreator { + T create(Class rpcInterface, + ServerConnector connector); + } +} diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java index c600cf1500..72386400fe 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbsoluteLayoutConnector.java @@ -15,6 +15,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.ComponentConnector; import com.vaadin.terminal.gwt.client.DirectionalManagedLayout; import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.terminal.gwt.client.ui.VAbsoluteLayout.AbsoluteWrapper; import com.vaadin.ui.AbsoluteLayout; @@ -42,13 +43,12 @@ public class AbsoluteLayoutConnector extends }; - private AbsoluteLayoutServerRPC rpc = GWT - .create(AbsoluteLayoutServerRPC.class); + private AbsoluteLayoutServerRPC rpc; @Override protected void init() { super.init(); - initRPC(rpc); + rpc = RpcProxy.create(AbsoluteLayoutServerRPC.class, this); } @Override diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java index cc357cf772..78a6ce889b 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java @@ -20,7 +20,6 @@ import com.vaadin.terminal.gwt.client.TooltipInfo; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.VConsole; import com.vaadin.terminal.gwt.client.communication.ServerRpc; -import com.vaadin.terminal.gwt.client.communication.ServerRpc.InitializableClientToServerRpc; import com.vaadin.terminal.gwt.client.communication.SharedState; import com.vaadin.terminal.gwt.client.communication.StateChangeEvent; @@ -357,20 +356,6 @@ public abstract class AbstractComponentConnector extends AbstractConnector this.state = (ComponentState) state; } - /** - * Initialize the given RPC proxy object so it is connected to this - * paintable. - * - * @param clientToServerRpc - * The RPC instance to initialize. Must have been created using - * GWT.create(). - */ - protected T initRPC(T clientToServerRpc) { - ((InitializableClientToServerRpc) clientToServerRpc).initRpc( - getConnectorId(), getConnection()); - return clientToServerRpc; - } - public LayoutManager getLayoutManager() { return LayoutManager.get(getConnection()); } diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java index e58dce5223..046767a88d 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java @@ -5,7 +5,6 @@ package com.vaadin.terminal.gwt.client.ui; import java.util.List; -import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.Widget; @@ -17,6 +16,7 @@ import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.Util; import com.vaadin.terminal.gwt.client.VCaption; import com.vaadin.terminal.gwt.client.ValueMap; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.terminal.gwt.client.ui.layout.ComponentConnectorLayoutSlot; import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot; @@ -24,13 +24,12 @@ import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot; public abstract class AbstractOrderedLayoutConnector extends AbstractComponentContainerConnector implements DirectionalManagedLayout { - public interface AbstractOrderedLayoutServerRPC extends - LayoutClickRPC, ServerRpc { + public interface AbstractOrderedLayoutServerRPC extends LayoutClickRPC, + ServerRpc { } - AbstractOrderedLayoutServerRPC rpc = GWT - .create(AbstractOrderedLayoutServerRPC.class); + AbstractOrderedLayoutServerRPC rpc; private LayoutClickEventHandler clickEventHandler = new LayoutClickEventHandler( this) { @@ -50,7 +49,7 @@ public abstract class AbstractOrderedLayoutConnector extends @Override public void init() { - initRPC(rpc); + rpc = RpcProxy.create(AbstractOrderedLayoutServerRPC.class, this); getLayoutManager().registerDependency(this, getWidget().spacingMeasureElement); } diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java index 65018aaadf..827490524a 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java @@ -19,6 +19,7 @@ import com.vaadin.terminal.gwt.client.ComponentState; import com.vaadin.terminal.gwt.client.Connector; import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent; import com.vaadin.terminal.gwt.client.MouseEventDetails; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.terminal.gwt.client.communication.StateChangeEvent; import com.vaadin.terminal.gwt.client.ui.VAbstractSplitPanel.SplitterMoveHandler; @@ -127,12 +128,12 @@ public abstract class AbstractSplitPanelConnector extends } - private AbstractSplitPanelRPC rpc = GWT.create(AbstractSplitPanelRPC.class); + private AbstractSplitPanelRPC rpc; @Override protected void init() { super.init(); - initRPC(rpc); + rpc = RpcProxy.create(AbstractSplitPanelRPC.class, this); // TODO Remove getWidget().client = getConnection(); diff --git a/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java index 1549aa873d..07d62a10e7 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/ButtonConnector.java @@ -12,6 +12,7 @@ import com.vaadin.terminal.gwt.client.ComponentState; import com.vaadin.terminal.gwt.client.EventHelper; import com.vaadin.terminal.gwt.client.MouseEventDetails; import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle; import com.vaadin.ui.Button; @@ -48,8 +49,8 @@ public class ButtonConnector extends AbstractComponentConnector { @Override public void init() { super.init(); - ButtonServerRpc rpcProxy = GWT.create(ButtonServerRpc.class); - getWidget().buttonRpcProxy = initRPC(rpcProxy); + getWidget().buttonRpcProxy = RpcProxy.create(ButtonServerRpc.class, + this); } @Override diff --git a/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java index 8bf14fdbdb..b45e238825 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/CssLayoutConnector.java @@ -9,6 +9,7 @@ import com.google.gwt.user.client.ui.Widget; import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.ComponentConnector; import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.ui.CssLayout; @@ -33,12 +34,12 @@ public class CssLayoutConnector extends AbstractComponentContainerConnector { } - private CssLayoutServerRPC rpc = GWT.create(CssLayoutServerRPC.class); + private CssLayoutServerRPC rpc; @Override protected void init() { super.init(); - initRPC(rpc); + rpc = RpcProxy.create(CssLayoutServerRPC.class, this); } @Override diff --git a/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java b/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java index bd8a242c67..14fe7bd744 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/EmbeddedConnector.java @@ -22,6 +22,7 @@ import com.vaadin.terminal.gwt.client.MouseEventDetails; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.VConsole; import com.vaadin.terminal.gwt.client.VTooltip; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.ui.Embedded; @@ -33,12 +34,12 @@ public class EmbeddedConnector extends AbstractComponentConnector { public static final String ALTERNATE_TEXT = "alt"; - EmbeddedServerRPC rpc = GWT.create(EmbeddedServerRPC.class); + EmbeddedServerRPC rpc; @Override protected void init() { super.init(); - initRPC(rpc); + rpc = RpcProxy.create(EmbeddedServerRPC.class, this); } @Override diff --git a/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java index 06e61bf5e9..73dd291f42 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/GridLayoutConnector.java @@ -15,6 +15,7 @@ import com.vaadin.terminal.gwt.client.ConnectorMap; import com.vaadin.terminal.gwt.client.DirectionalManagedLayout; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.VCaption; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.terminal.gwt.client.ui.VGridLayout.Cell; import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot; @@ -43,11 +44,11 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector } - private GridLayoutServerRPC rpc = GWT.create(GridLayoutServerRPC.class); + private GridLayoutServerRPC rpc; @Override public void init() { - initRPC(rpc); + rpc = RpcProxy.create(GridLayoutServerRPC.class, this); getLayoutManager().registerDependency(this, getWidget().spacingMeasureElement); } diff --git a/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java index 1790a42b21..144b5eb391 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/NativeButtonConnector.java @@ -10,6 +10,7 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection; import com.vaadin.terminal.gwt.client.ComponentState; import com.vaadin.terminal.gwt.client.EventHelper; import com.vaadin.terminal.gwt.client.UIDL; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonServerRpc; import com.vaadin.ui.NativeButton; @@ -20,8 +21,8 @@ public class NativeButtonConnector extends AbstractComponentConnector { public void init() { super.init(); - ButtonServerRpc rpcProxy = GWT.create(ButtonServerRpc.class); - getWidget().buttonRpcProxy = initRPC(rpcProxy); + getWidget().buttonRpcProxy = RpcProxy.create(ButtonServerRpc.class, + this); } @Override diff --git a/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java index 4dc4098c14..89219f5be8 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java @@ -16,6 +16,7 @@ import com.vaadin.terminal.gwt.client.LayoutManager; import com.vaadin.terminal.gwt.client.MouseEventDetails; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.ui.Panel; @@ -70,11 +71,11 @@ public class PanelConnector extends AbstractComponentContainerConnector private Integer uidlScrollLeft; - private PanelServerRPC rpc = GWT.create(PanelServerRPC.class); + private PanelServerRPC rpc; @Override public void init() { - initRPC(rpc); + rpc = RpcProxy.create(PanelServerRPC.class, this); VPanel panel = getWidget(); LayoutManager layoutManager = getLayoutManager(); diff --git a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java index 7db14d73f0..3cff41dbd3 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java @@ -29,6 +29,7 @@ import com.vaadin.terminal.gwt.client.MouseEventDetails; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.Util; import com.vaadin.terminal.gwt.client.VConsole; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.terminal.gwt.client.communication.StateChangeEvent; import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler; @@ -42,7 +43,7 @@ public class RootConnector extends AbstractComponentContainerConnector { } - private RootServerRPC rpc = GWT.create(RootServerRPC.class); + private RootServerRPC rpc; private HandlerRegistration childStateChangeHandlerRegistration; @@ -57,7 +58,7 @@ public class RootConnector extends AbstractComponentContainerConnector { @Override protected void init() { super.init(); - initRPC(rpc); + rpc = RpcProxy.create(RootServerRPC.class, this); } @Override diff --git a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java index 8c824b89a9..811b00d929 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/WindowConnector.java @@ -21,6 +21,7 @@ import com.vaadin.terminal.gwt.client.LayoutManager; import com.vaadin.terminal.gwt.client.MouseEventDetails; import com.vaadin.terminal.gwt.client.UIDL; import com.vaadin.terminal.gwt.client.Util; +import com.vaadin.terminal.gwt.client.communication.RpcProxy; import com.vaadin.terminal.gwt.client.communication.ServerRpc; import com.vaadin.terminal.gwt.client.ui.PanelConnector.PanelState; import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener; @@ -45,7 +46,7 @@ public class WindowConnector extends AbstractComponentContainerConnector } }; - private WindowServerRPC rpc = GWT.create(WindowServerRPC.class); + private WindowServerRPC rpc; @Override protected boolean delegateCaptionHandling() { @@ -55,7 +56,8 @@ public class WindowConnector extends AbstractComponentContainerConnector @Override protected void init() { super.init(); - initRPC(rpc); + rpc = RpcProxy.create(WindowServerRPC.class, this); + getLayoutManager().registerDependency(this, getWidget().contentPanel.getElement()); getLayoutManager().registerDependency(this, getWidget().header); diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java new file mode 100644 index 0000000000..ad4dd8a3c8 --- /dev/null +++ b/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java @@ -0,0 +1,130 @@ +package com.vaadin.terminal.gwt.widgetsetutils; + +import java.io.PrintWriter; +import java.util.Date; + +import com.google.gwt.core.client.GWT; +import com.google.gwt.core.ext.Generator; +import com.google.gwt.core.ext.GeneratorContext; +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.TypeOracle; +import com.google.gwt.user.rebind.ClassSourceFileComposerFactory; +import com.google.gwt.user.rebind.SourceWriter; +import com.vaadin.terminal.gwt.client.ServerConnector; +import com.vaadin.terminal.gwt.client.communication.RpcProxy.RpcProxyCreator; +import com.vaadin.terminal.gwt.client.communication.ServerRpc; +import com.vaadin.terminal.gwt.client.communication.ServerRpc.InitializableClientToServerRpc; + +public class RpcProxyCreatorGenerator extends Generator { + + @Override + public String generate(TreeLogger logger, GeneratorContext ctx, + String requestedClassName) throws UnableToCompleteException { + logger.log(TreeLogger.DEBUG, "Running RpcProxyCreatorGenerator"); + TypeOracle typeOracle = ctx.getTypeOracle(); + assert (typeOracle != null); + + JClassType requestedType = typeOracle.findType(requestedClassName); + String packageName = requestedType.getPackage().getName(); + String className = requestedType.getSimpleSourceName() + "Impl"; + if (requestedType == null) { + logger.log(TreeLogger.ERROR, "Unable to find metadata for type '" + + requestedClassName + "'", null); + throw new UnableToCompleteException(); + } + + createType(logger, ctx, packageName, className); + return packageName + "." + className; + } + + private void createType(TreeLogger logger, GeneratorContext context, + String packageName, String className) { + ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory( + packageName, className); + + PrintWriter printWriter = context.tryCreate(logger, + composer.getCreatedPackage(), + composer.getCreatedClassShortName()); + if (printWriter == null) { + // print writer is null if source code has already been generated + return; + } + Date date = new Date(); + TypeOracle typeOracle = context.getTypeOracle(); + + // init composer, set class properties, create source writer + composer.addImport(GWT.class.getCanonicalName()); + composer.addImport(ServerRpc.class.getCanonicalName()); + composer.addImport(ServerConnector.class.getCanonicalName()); + composer.addImport(InitializableClientToServerRpc.class + .getCanonicalName()); + composer.addImport(IllegalArgumentException.class.getCanonicalName()); + composer.addImplementedInterface(RpcProxyCreator.class + .getCanonicalName()); + + SourceWriter sourceWriter = composer.createSourceWriter(context, + printWriter); + sourceWriter.indent(); + + sourceWriter + .println("public T create(Class rpcInterface, ServerConnector connector) {"); + sourceWriter.indent(); + + sourceWriter + .println("if (rpcInterface == null || connector == null) {"); + sourceWriter.indent(); + sourceWriter + .println("throw new IllegalArgumentException(\"RpcInterface and/or connector cannot be null\");"); + sourceWriter.outdent(); + sourceWriter + .println("} else if (connector.getConnectorId() == null) {"); + sourceWriter.indent(); + sourceWriter + .println("throw new IllegalArgumentException(\"Connector must be initialized before creating Rpc instances.\");"); + sourceWriter.outdent(); + + JClassType initializableInterface = typeOracle.findType(ServerRpc.class + .getCanonicalName()); + + for (JClassType rpcType : initializableInterface.getSubtypes()) { + String rpcClassName = rpcType.getQualifiedSourceName(); + if (InitializableClientToServerRpc.class.getCanonicalName().equals( + rpcClassName)) { + // InitializableClientToServerRpc is a special marker interface + // that should not get a generated class + continue; + } + sourceWriter.println("} else if (rpcInterface == " + rpcClassName + + ".class) {"); + sourceWriter.indent(); + sourceWriter.println(rpcClassName + " rpc = GWT.create(" + + rpcClassName + ".class);"); + sourceWriter + .println("((InitializableClientToServerRpc) rpc).initRpc(connector.getConnectorId(), connector.getConnection());"); + sourceWriter.println("return (T) rpc;"); + sourceWriter.outdent(); + } + + sourceWriter.println("} else {"); + sourceWriter.indent(); + sourceWriter + .println("throw new IllegalArgumentException(\"No RpcInterface of type \"+ rpcInterface.getName() + \" was found.\");"); + sourceWriter.outdent(); + // End of if + sourceWriter.println("}"); + // End of method + sourceWriter.println("}"); + + // close generated class + sourceWriter.outdent(); + sourceWriter.println("}"); + // commit generated class + context.commit(logger, printWriter); + logger.log(Type.INFO, composer.getCreatedClassName() + " created in " + + (new Date().getTime() - date.getTime()) / 1000 + "seconds"); + + } +}