List of usage examples for com.google.gwt.core.ext GeneratorContext commit
void commit(TreeLogger logger, PrintWriter pw);
From source file:cc.alcina.framework.entity.gwtsynth.ClientReflectionGenerator.java
License:Apache License
private void commit(GeneratorContext context, TreeLogger logger, PrintWriter printWriter) { context.commit(logger, printWriter); if (wrappedWriters.containsKey(printWriter)) { System.out.println(wrappedWriters.get(printWriter).getStringWriter().toString()); }//from w w w . j av a 2s . c om }
From source file:com.arondor.common.reflection.noreflect.gwtgenerator.GWTNoReflectRegistrarGenerator.java
License:Apache License
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { LOGGER.finest("Generating for: " + typeName); String packageName = getPackageName(); String className = getClassName(); String completeName = packageName + "." + className; PrintWriter src = context.tryCreate(logger, packageName, className); if (src == null) { LOGGER.finest("Already generated for : " + completeName); return completeName; }/*from w w w . j a va2 s . c o m*/ Collection<AccessibleClass> accessibleClasses = getAccessibleClasses(); NoReflectRegistrarGenerator noReflect = new NoReflectRegistrarGenerator(); noReflect.setClassName(className); noReflect.setPackageName(packageName); JavaAccessibleClassParser accessibleClassParser = new JavaAccessibleClassParser(); accessibleClassParser.setTryInstantiateClassForDefaultValue(false); noReflect.setAccessibleClassParser(accessibleClassParser); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream printStream = new PrintStream(baos); noReflect.generate(printStream, accessibleClasses); printStream.close(); String srcCode = new String(baos.toByteArray()); LOGGER.info("Generated : " + srcCode.length() + " bytes for " + completeName); src.append(srcCode); context.commit(logger, src); return completeName; }
From source file:com.bramosystems.oss.player.core.rebind.PlayerManagerGenerator.java
License:Apache License
/** * @param logger Logger object// w w w .j a v a 2 s. co m * @param context Generator context */ private void generateClass(TreeLogger logger, GeneratorContext context) throws NotFoundException, BadPropertyValueException, UnableToCompleteException, IOException { // get print writer that receives the source code PrintWriter printWriter = context.tryCreate(logger, packageName, className); // print writer if null, source code has ALREADY been generated, return if (printWriter == null) { return; } // build plugin mime types ... ConfigurationProperty mimeFile = context.getPropertyOracle() .getConfigurationProperty("bstplayer.media.mimeTypes"); String val = mimeFile.getValues().get(0); if (val == null) { logger.log(TreeLogger.Type.INFO, "'" + mimeFile.getName() + "' configuration property not set! Using defaults"); parseMimeFile(DEFAULT_MIME_TYPES_FILE); } else { logger.log(TreeLogger.Type.INFO, "'" + mimeFile.getName() + "' set! Using '" + val + "'"); parseMimeFile(val); } collatePlayers(context.getTypeOracle()); // init composer, set class properties, create source writer ClassSourceFileComposerFactory composer = new ClassSourceFileComposerFactory(packageName, className); composer.setSuperclass("PlayerManager"); composer.addImport("com.google.gwt.core.client.GWT"); composer.addImport("com.bramosystems.oss.player.core.client.spi.PlayerProviderFactory"); composer.addImport("com.bramosystems.oss.player.core.client.impl.CallbackUtility"); composer.addImport("com.bramosystems.oss.player.core.client.spi.ConfigurationContext"); composer.addImport("com.bramosystems.oss.player.core.client.*"); composer.addImport("java.util.*"); SourceWriter sourceWriter = composer.createSourceWriter(context, printWriter); sourceWriter.println( "private HashMap<String, HashMap<String, PlayerInfo>> pInfos = new HashMap<String, HashMap<String, PlayerInfo>>();"); // collate widget factories & create static holders ... Iterator<String> fact = pMap.keySet().iterator(); while (fact.hasNext()) { String provClass = fact.next(); sourceWriter.println("private static PlayerProviderFactory pwf_" + escapeProviderName(pMap.get(provClass).name) + " = GWT.create(" + provClass + ".class);"); } sourceWriter.println(); Pattern ptrn = Pattern.compile("(\\d+)\\.(\\d+)\\.(\\d+)"); // generate constructor source code sourceWriter.println("public " + className + "() { "); sourceWriter.indent(); // init widget factories ... fact = pMap.keySet().iterator(); while (fact.hasNext()) { String provClass = fact.next(); String provName = escapeProviderName(pMap.get(provClass).name); sourceWriter.println( "pwf_" + provName + ".init(new ConfigurationContext(CallbackUtility.initCallbackHandlers(\"" + provName + "\"), \"bstplayer.handlers." + provName + "\"));"); } sourceWriter.println(); // init providers ... fact = pMap.keySet().iterator(); while (fact.hasNext()) { _provider pvd = pMap.get(fact.next()); sourceWriter.println("pInfos.put(\"" + pvd.name + "\", new HashMap<String, PlayerInfo>());"); Iterator<_player> pns = pvd.players.iterator(); while (pns.hasNext()) { _player ply = pns.next(); boolean ps = false, ms = false; JClassType ints[] = ply.interfaces; for (int j = 0; j < ints.length; j++) { if (ints[j].getQualifiedSourceName().equals(MatrixSupport.class.getName())) { ms = true; } else if (ints[j].getQualifiedSourceName().equals(PlaylistSupport.class.getName())) { ps = true; } } Matcher m = ptrn.matcher(ply.minPluginVer); if (m.matches()) { sourceWriter.println("pInfos.get(\"" + pvd.name + "\").put(\"" + ply.name + "\", new PlayerInfo(\"" + pvd.name + "\",\"" + ply.name + "\"," + "PluginVersion.get(" + Integer.parseInt(m.group(1)) + "," + Integer.parseInt(m.group(2)) + "," + Integer.parseInt(m.group(3)) + ")," + ps + "," + ms + "));"); } else { logger.log(TreeLogger.Type.WARN, "Min"); } } } sourceWriter.outdent(); sourceWriter.println("}"); // end constructor source generation sourceWriter.println(); // implement get provider names ... sourceWriter.println("@Override"); sourceWriter.println("public Set<String> getProviders(){"); sourceWriter.indent(); sourceWriter.println("return new TreeSet<String>(pInfos.keySet());"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); // implement get player names by provider ... sourceWriter.println("@Override"); sourceWriter.println("public Set<String> getPlayerNames(String providerName) {"); sourceWriter.indent(); sourceWriter.println("if(!pInfos.containsKey(providerName))"); sourceWriter.println("throw new IllegalArgumentException(\"Unknown player provider - \" + providerName);"); sourceWriter.println("return new TreeSet<String>(pInfos.get(providerName).keySet());"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); // implement get player infos ... sourceWriter.println("@Override"); sourceWriter.println("public PlayerInfo getPlayerInfo(String providerName, String playerName) {"); sourceWriter.indent(); sourceWriter.println("if(!pInfos.containsKey(providerName)) {"); sourceWriter.println("throw new IllegalArgumentException(\"Unknown player provider - \" + providerName);}"); sourceWriter.println("if(providerName.equals(\"api\")){"); sourceWriter.println("return getApiPlayerInfoForPlugin(playerName);}"); sourceWriter.println("else if(!pInfos.get(providerName).containsKey(playerName)){"); sourceWriter.println("throw new IllegalArgumentException(\"Unknown player name - \" + playerName);}"); sourceWriter.println("return pInfos.get(providerName).get(playerName);"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); // implement get widget factory with defered binding on demand .... sourceWriter.println("@Override"); sourceWriter.println("public PlayerProviderFactory getProviderFactory(String provider) {"); sourceWriter.indent(); sourceWriter.println("PlayerProviderFactory wf = null;"); boolean firstRun = true; Iterator<_provider> provs = pMap.values().iterator(); while (provs.hasNext()) { _provider prov = provs.next(); if (firstRun) { sourceWriter.println("if(\"" + prov.name + "\".equals(provider)) {"); } else { sourceWriter.println("else if(\"" + prov.name + "\".equals(provider)) {"); } sourceWriter.indent(); sourceWriter.println("wf = pwf_" + escapeProviderName(prov.name) + ";"); sourceWriter.outdent(); sourceWriter.println("}"); firstRun = false; } sourceWriter.println("return wf;"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); // implement mimeTypes .... sourceWriter.println("@Override"); sourceWriter.println("protected void initMimeTypes(HashMap<String, String> mimeTypes) {"); sourceWriter.indent(); Iterator<String> mimeKeys = mimeMap.keySet().iterator(); while (mimeKeys.hasNext()) { String mime = mimeKeys.next(); sourceWriter.println("mimeTypes.put(\"" + mime + "\",\"" + mimeMap.get(mime) + "\");"); } sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); // close generated class sourceWriter.outdent(); sourceWriter.println("}"); // commit generated class context.commit(logger, printWriter); }
From source file:com.em.validation.rebind.generator.gwt.GwtGenerator.java
License:Apache License
/** * Actually generate all of the files described by the ClassDescriptor and the dependency tree. * // w w w .j av a 2s. c o m * @param descriptor * @param logger * @param context */ protected void generateClass(ClassDescriptor descriptor, TreeLogger logger, GeneratorContext context) { //set using gwt features in generator state GeneratorState.INSTANCE.setUsingGwtFeatures(true); //do not generate a class twice. this hash set is used to manage that. if (this.generatedSet.contains(descriptor.getFullClassName())) { return; } //create the print writer for the class PrintWriter printWriter = context.tryCreate(logger, descriptor.getPackageName(), descriptor.getClassName()); //this is null when a class already exists. this usually happens when the print writer would be attempting //to output the same class twice. with the generationSet and various other blocks this should not happen. if (printWriter == null) { return; } //log generation of the code, debug logger.log(Type.DEBUG, "Generating: " + descriptor.getPackageName() + "." + descriptor.getClassName()); //use the print writer printWriter.print(descriptor.getClassContents()); //commit the source context.commit(logger, printWriter); //if not in the hash set, then set it to prevent cyclical / infinite recursion problems this.generatedSet.add(descriptor.getFullClassName()); //generate the class files for those that this class depends on for (ClassDescriptor depenency : descriptor.getDependencies()) { this.generateClass(depenency, logger, context); } }
From source file:com.github.gilbertotorrezan.gwtviews.rebind.NavigationManagerGenerator.java
License:Open Source License
@SuppressWarnings("rawtypes") @Override/* ww w .jav a 2 s . c om*/ public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { final TypeOracle typeOracle = context.getTypeOracle(); JClassType mainType = typeOracle.findType(typeName); PrintWriter writer = context.tryCreate(logger, mainType.getPackage().getName(), mainType.getName() + "Impl"); if (writer == null) { return mainType.getQualifiedSourceName() + "Impl"; } ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(mainType.getPackage().getName(), mainType.getName() + "Impl"); factory.addImplementedInterface(typeName); factory.addImport(Presenter.class.getPackage().getName() + ".*"); factory.addImport("com.google.gwt.user.client.History"); factory.addImport("com.google.gwt.user.client.ui.Widget"); factory.addImport("com.google.gwt.user.client.ui.Panel"); factory.addImport("com.google.gwt.http.client.URL"); factory.addImport("com.google.gwt.user.client.rpc.AsyncCallback"); factory.addImport("com.google.gwt.core.client.*"); factory.addImport("com.google.gwt.event.logical.shared.*"); factory.addImport("com.github.gilbertotorrezan.gwtviews.client.analytics.*"); factory.addImport("javax.annotation.Generated"); factory.addImport("java.util.*"); factory.addAnnotationDeclaration("@Generated(" + "value=\"" + NavigationManagerGenerator.class.getName() + "\", " + "date=\"" + new Date() + "\", " + "comments=\"Generated by GWT-Views project.\")"); SourceWriter sourceWriter = factory.createSourceWriter(context, writer); sourceWriter.println("//AUTO GENERATED FILE BY GWT-VIEWS AT " + getClass().getName() + ". DO NOT EDIT!\n"); sourceWriter.println("private Panel rootContainer;"); sourceWriter.println("private UserPresenceManager userPresenceManager;"); sourceWriter.println("private URLTokenFactory tokenFactory = new URLTokenFactory();"); sourceWriter.println("private final Map<String, Presenter<?>> presentersMap = new HashMap<>();"); sourceWriter.println("private URLToken currentToken = tokenFactory.createToken(\"\");"); sourceWriter.println("private URLInterceptor currentInterceptor;\n"); List<ViewPage> viewPages = new ArrayList<>(); Map<String, HasViewPages> viewContainers = new HashMap<>(); Set<ViewPage> viewsInNeedOfPresenters = new LinkedHashSet<>(); Set<HasViewPages> containersInNeedOfPresenters = new LinkedHashSet<>(); ViewPage defaultViewPage = null; ViewPage notFoundViewPage = null; HasViewPages defaultViewContainerPage = null; JClassType containerType = typeOracle.findType(HasViews.class.getName()); JClassType[] types = typeOracle.getTypes(); for (JClassType type : types) { if (type.isAnnotationPresent(View.class)) { View view = type.getAnnotation(View.class); if (shouldForceEmptyConstructor(view) && !type.isDefaultInstantiable()) { logger.log(Type.WARN, type.getName() + " must have an empty constructor to be a valid " + View.class.getSimpleName() + "."); continue; } ViewPage page = new ViewPage(view, type); viewPages.add(page); if (view.defaultView()) { defaultViewPage = page; } if (view.notFoundView()) { notFoundViewPage = page; } } else if (type.isAnnotationPresent(ViewContainer.class)) { if (!type.isAssignableTo(containerType)) { logger.log(Type.WARN, type.getName() + " must implement " + containerType.getName() + " to be a valid " + ViewContainer.class.getSimpleName() + "."); continue; } ViewContainer container = type.getAnnotation(ViewContainer.class); if (shouldForceEmptyConstructor(container) && !type.isDefaultInstantiable()) { logger.log(Type.WARN, type.getName() + " must have an empty constructor to be a valid " + ViewContainer.class.getSimpleName() + "."); continue; } HasViewPages hasViews = new HasViewPages(container, type); viewContainers.put(type.getQualifiedSourceName(), hasViews); if (container.defaultContainer()) { defaultViewContainerPage = hasViews; } } } if (defaultViewPage == null) { logger.log(Type.ERROR, "No default view page defined!"); throw new UnableToCompleteException(); } if (defaultViewContainerPage == null && viewContainers.size() > 1) { logger.log(Type.ERROR, "There are more than one " + ViewContainer.class.getSimpleName() + " but no one is the default!"); throw new UnableToCompleteException(); } if (defaultViewContainerPage == null && !viewContainers.isEmpty()) { defaultViewContainerPage = viewContainers.values().iterator().next(); } sourceWriter.println("public void onValueChange(ValueChangeEvent<String> event){"); sourceWriter.indent(); sourceWriter.println("final URLToken token = tokenFactory.createToken(event.getValue());"); sourceWriter.println("if (currentInterceptor != null){"); sourceWriter.indent(); sourceWriter.println("History.newItem(currentToken.toString(), false);"); sourceWriter.println("currentInterceptor.onUrlChanged(currentToken, token, new URLInterceptorCallback(){"); sourceWriter.indent(); sourceWriter.println("@Override\npublic void proceedTo(URLToken destination){"); sourceWriter.indent(); sourceWriter.println("History.newItem(destination.toString(), false);"); sourceWriter.println("proceedToImpl(destination);"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.outdent(); sourceWriter.println("});"); sourceWriter.println("return;"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println("this.proceedToImpl(token);"); sourceWriter.outdent(); sourceWriter.println("}\n"); sourceWriter.println("private void proceedToImpl(final URLToken token){"); sourceWriter.indent(); sourceWriter.println("this.currentToken = token;"); sourceWriter.println("switch (token.getId()){"); sourceWriter.indent(); int defaultViewIndex = -1; int notFoundViewIndex = -1; for (int i = 0; i < viewPages.size(); i++) { ViewPage viewPage = viewPages.get(i); final View view = viewPage.getView(); logger.log(Type.DEBUG, "Processing view " + view.value() + "..."); if (view.defaultView()) { defaultViewIndex = i; sourceWriter.println("case \"\":"); } if (view.notFoundView()) { notFoundViewIndex = i; } sourceWriter.println("case \"" + view.value() + "\": {"); sourceWriter.indent(); if (!view.publicAccess()) { sourceWriter.println("if (userPresenceManager != null) {"); sourceWriter.indent(); if (view.rolesAllowed() != null && view.rolesAllowed().length > 0) { String[] roles = view.rolesAllowed(); StringBuilder params = new StringBuilder("new String[]{ "); String sep = ""; for (String role : roles) { params.append(sep).append("\"").append(role).append("\""); sep = ", "; } params.append(" }"); sourceWriter.println("userPresenceManager.isUserInAnyRole(token, " + params.toString() + ", new AsyncCallback<Boolean>(){"); } else { sourceWriter.println( "userPresenceManager.isUserInAnyRole(token, new String[0], new AsyncCallback<Boolean>(){"); } sourceWriter.indent(); sourceWriter.println("@Override"); sourceWriter.println("public void onSuccess(Boolean allowed){"); sourceWriter.indent(); sourceWriter.println("if (allowed == null || !allowed){"); sourceWriter.indent(); sourceWriter.println("URLToken nextToken = tokenFactory.createToken(\"" + defaultViewPage.getView().value() + "\");"); sourceWriter.println("nextToken.setParameter(\"next\", URL.encodeQueryString(token.toString()));"); sourceWriter.println("nextToken.go();"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println("else {"); sourceWriter.indent(); sourceWriter.println("showPresenter" + i + "(token);"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println("@Override"); sourceWriter.println("public void onFailure(Throwable error){"); sourceWriter.indent(); sourceWriter.println("GWT.log(\"Error loading view: \" + error, error);"); sourceWriter.println("URLToken nextToken = tokenFactory.createToken(\"" + defaultViewPage.getView().value() + "\");"); sourceWriter.println("nextToken.setParameter(\"next\", URL.encodeQueryString(token.toString()));"); sourceWriter.println("nextToken.go();"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.outdent(); sourceWriter.println("});"); sourceWriter.println("return;"); sourceWriter.outdent(); sourceWriter.println("}"); } sourceWriter.println("showPresenter" + i + "(token);"); sourceWriter.outdent(); sourceWriter.println("}\nbreak;"); } sourceWriter.println("default: {"); sourceWriter.indent(); if (notFoundViewPage != null) { sourceWriter.println("//NotFound View"); sourceWriter.println("showPresenter" + notFoundViewIndex + "(tokenFactory.createToken(\"" + notFoundViewPage.getView().value() + "\"));"); } else { sourceWriter.println("//Default View"); sourceWriter.println("History.newItem(\"" + defaultViewPage.getView().value() + "\", false);"); sourceWriter.println("showPresenter" + defaultViewIndex + "(tokenFactory.createToken(\"" + defaultViewPage.getView().value() + "\"));"); } sourceWriter.outdent(); sourceWriter.println("}\nbreak;"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.outdent(); sourceWriter.println("}\n"); for (int i = 0; i < viewPages.size(); i++) { ViewPage viewPage = viewPages.get(i); final View view = viewPage.getView(); sourceWriter.println("/** Method to show the presenter of the " + view.value() + " view. */"); sourceWriter.println("private void showPresenter" + i + "(final URLToken token) {"); sourceWriter.indent(); sourceWriter.println("GWT.runAsync(new RunAsyncCallback() {"); sourceWriter.indent(); sourceWriter.println("public void onSuccess() {"); sourceWriter.indent(); sourceWriter.println("UniversalAnalyticsTracker.sendPageView(token.toString());"); sourceWriter.println("Presenter<?> presenter = presentersMap.get(\"" + view.value() + "\");"); sourceWriter.println("if (presenter == null) {"); sourceWriter.indent(); Class<? extends Presenter> customPresenter = view.customPresenter(); if (!Presenter.class.equals(customPresenter)) { sourceWriter.println("presenter = GWT.create(" + customPresenter.getName() + ".class);"); } else { viewsInNeedOfPresenters.add(viewPage); sourceWriter.println("presenter = (Presenter<?>) GWT.create(" + viewPage.getType().getName() + "Presenter.class);"); } sourceWriter.println("presentersMap.put(\"" + view.value() + "\", presenter);"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println("Widget widget = presenter.getView(token);"); Class<? extends URLInterceptor> urlInterceptor = view.urlInterceptor(); if (!URLInterceptor.class.equals(urlInterceptor)) { String interceptorName = urlInterceptor.getName(); if (interceptorName.equals(viewPage.getType().getQualifiedSourceName())) { sourceWriter.println("currentInterceptor = (URLInterceptor) widget;"); } else if (interceptorName.equals(customPresenter.getName())) { sourceWriter.println("currentInterceptor = (URLInterceptor) presenter;"); } else { sourceWriter .println("currentInterceptor = GWT.create(" + urlInterceptor.getName() + ".class);"); } } else { sourceWriter.println("currentInterceptor = null;"); } boolean usesViewContainer = view.usesViewContainer(); if (usesViewContainer && !viewContainers.isEmpty()) { Class<?> viewContainer = view.viewContainer(); HasViewPages hasViews; if (HasViews.class.equals(viewContainer)) { hasViews = defaultViewContainerPage; } else { hasViews = viewContainers.get(viewContainer.getName()); } if (hasViews == null) { logger.log(Type.ERROR, viewContainer.getName() + " is not a valid " + ViewContainer.class.getSimpleName() + " for " + View.class.getSimpleName() + " " + viewPage.getType().getQualifiedSourceName() + "."); throw new UnableToCompleteException(); } sourceWriter.println("Presenter<?> containerPresenter = presentersMap.get(\"" + hasViews.getType().getQualifiedSourceName() + "\");"); sourceWriter.println("if (containerPresenter == null) {"); sourceWriter.indent(); if (!Presenter.class.equals(hasViews.getContainer().customPresenter())) { sourceWriter.println("containerPresenter = GWT.create(" + hasViews.getContainer().customPresenter().getName() + ".class);"); } else { containersInNeedOfPresenters.add(hasViews); sourceWriter.println("containerPresenter = (Presenter<?>) GWT.create(" + hasViews.getType().getName() + "Presenter.class);"); } sourceWriter.println("presentersMap.put(\"" + hasViews.getType().getQualifiedSourceName() + "\", containerPresenter);"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println("Widget container = containerPresenter.getView(token);"); sourceWriter.println("((" + HasViews.class.getName() + ") container).showView(token, widget);"); sourceWriter.println("if (container.getParent() == null){"); sourceWriter.indent(); sourceWriter.println("rootContainer.clear();"); sourceWriter.println("rootContainer.add(container);"); sourceWriter.outdent(); sourceWriter.println("}"); } else { sourceWriter.println("rootContainer.clear();"); sourceWriter.println("rootContainer.add(widget);"); } sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println( "public void onFailure(Throwable reason) { GWT.log(\"Error on loading presenter with token: \"+token, reason); }"); sourceWriter.outdent(); sourceWriter.println("});"); sourceWriter.outdent(); sourceWriter.println("}\n"); } sourceWriter.println("@Override\npublic void clearCache() {"); sourceWriter.indent(); sourceWriter.println("presentersMap.clear();"); sourceWriter.outdent(); sourceWriter.println("}\n"); sourceWriter.println("@Override\npublic void clearCache(String tokenId) {"); sourceWriter.indent(); sourceWriter.println("presentersMap.remove(tokenId);"); sourceWriter.outdent(); sourceWriter.println("}\n"); sourceWriter.println("@Override\npublic void setRootContainer(Panel container) {"); sourceWriter.indent(); sourceWriter.println("this.rootContainer = container;"); sourceWriter.outdent(); sourceWriter.println("}\n"); sourceWriter.println("@Override\npublic void setUserPresenceManager(UserPresenceManager umanager) {"); sourceWriter.indent(); sourceWriter.println("this.userPresenceManager = umanager;"); sourceWriter.outdent(); sourceWriter.println("}\n"); sourceWriter.println("@Override\npublic void setURLTokenFactory(URLTokenFactory tokenFactory) {"); sourceWriter.indent(); sourceWriter.println("this.tokenFactory = tokenFactory;"); sourceWriter.outdent(); sourceWriter.println("}\n"); sourceWriter.println("@Override\npublic URLTokenFactory getURLTokenFactory() {"); sourceWriter.indent(); sourceWriter.println("return this.tokenFactory;"); sourceWriter.outdent(); sourceWriter.println("}\n"); sourceWriter.println("//View presenters"); for (ViewPage viewPage : viewsInNeedOfPresenters) { sourceWriter.println("public static interface " + viewPage.getType().getName() + "Presenter extends AutoPresenter<" + viewPage.getType().getQualifiedSourceName() + ">{}"); } if (!containersInNeedOfPresenters.isEmpty()) { sourceWriter.println("\n//ViewContainer presenters"); for (HasViewPages container : containersInNeedOfPresenters) { sourceWriter.println("public static interface " + container.getType().getName() + "Presenter extends AutoPresenter<" + container.getType().getQualifiedSourceName() + ">{}"); } } sourceWriter.outdent(); sourceWriter.println("}"); context.commit(logger, writer); return factory.getCreatedClassName(); }
From source file:com.github.gilbertotorrezan.gwtviews.rebind.PresenterGenerator.java
License:Open Source License
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { final TypeOracle typeOracle = context.getTypeOracle(); JClassType mainType = typeOracle.findType(typeName); JParameterizedType parameterized = mainType.getImplementedInterfaces()[0].isParameterized(); JClassType viewType = parameterized.getTypeArgs()[0]; final String className = viewType.getQualifiedSourceName(); String name = mainType.getName().substring(mainType.getName().lastIndexOf('.') + 1); name = name.substring(0, name.length() - "Presenter".length()); name = name + "_" + name + "PresenterImpl"; PrintWriter writer = context.tryCreate(logger, viewType.getPackage().getName(), name); if (writer == null) { return viewType.getPackage().getName() + "." + name; }//from w ww . j a va 2 s .c om ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(viewType.getPackage().getName(), name); factory.addImplementedInterface(AutoPresenter.class.getName()); factory.addImport(Presenter.class.getPackage().getName() + ".*"); factory.addImport("com.google.gwt.user.client.History"); factory.addImport("com.google.gwt.core.client.GWT"); factory.addImport("com.google.gwt.user.client.ui.Widget"); factory.addImport("javax.annotation.Generated"); factory.addImport("java.util.*"); factory.addAnnotationDeclaration("@Generated(" + "value=\"" + PresenterGenerator.class.getName() + "\", " + "date=\"" + new Date() + "\", " + "comments=\"Generated by GWT-Views project.\")"); View view = viewType.getAnnotation(View.class); ViewContainer viewContainer = viewType.getAnnotation(ViewContainer.class); CachePolicy cache; JClassType injectorType = null; String injectorMethod = null; if (view == null) { cache = CachePolicy.ALWAYS; } else { cache = view.cache(); } if (cache == CachePolicy.SAME_URL) { factory.setSuperclass(CachedPresenter.class.getName()); } SourceWriter sourceWriter = factory.createSourceWriter(context, writer); sourceWriter.println("//AUTO GENERATED FILE BY GWT-VIEWS AT " + getClass().getName() + ". DO NOT EDIT!\n"); if (cache == CachePolicy.ALWAYS) { sourceWriter.println("private Widget view; //the cached view"); } Class<?> injector = view == null ? void.class : view.injector(); if (injector.equals(void.class)) { injector = viewContainer == null ? void.class : viewContainer.injector(); } if (!injector.equals(void.class)) { try { injectorType = typeOracle.findType(injector.getName()); injectorMethod = view != null ? view.injectorMethod() : viewContainer.injectorMethod(); injectorMethod = getInjectorMethod(logger, injectorType, injectorMethod, className); } catch (Exception e) { logger.log(Type.ERROR, "Error loading the injector class \"" + injector.getName() + "\": " + e, e); throw new UnableToCompleteException(); } } if (cache == CachePolicy.SAME_URL) { sourceWriter.println("\n@Override\npublic Widget createNewView(URLToken url) {"); } else { sourceWriter.println("\n@Override\npublic Widget getView(URLToken url) {"); } sourceWriter.indent(); switch (cache) { case NEVER: { sourceWriter.println("//code for the CachePolicy.NEVER:"); printInjectorMethod(sourceWriter, className, injectorType, injectorMethod); } break; case ALWAYS: { sourceWriter.println("//code for the CachePolicy.ALWAYS:"); sourceWriter.println("if (this.view == null) {"); sourceWriter.indent(); printInjectorMethod(sourceWriter, className, injectorType, injectorMethod); sourceWriter.println("this.view = view;"); sourceWriter.outdent(); sourceWriter.println("}"); } break; case SAME_URL: { sourceWriter.println("//code for the CachePolicy.SAME_URL:"); printInjectorMethod(sourceWriter, className, injectorType, injectorMethod); } break; } sourceWriter.println("return view;"); sourceWriter.outdent(); sourceWriter.println("}\n"); sourceWriter.outdent(); sourceWriter.println("}\n"); context.commit(logger, writer); return factory.getCreatedClassName(); }
From source file:com.github.ludorival.dao.gwt.rebind.EntityManagerGenerator.java
License:Apache License
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { final TypeOracle typeOracle = context.getTypeOracle(); JClassType mainType = typeOracle.findType(typeName); String packageName = mainType.getPackage().getName(); String className = "Gwt" + mainType.getName(); if (parseOnlyInterface) className += "Light"; PrintWriter writer = context.tryCreate(logger, packageName, className); if (writer == null) { return packageName + "." + className; }//from ww w . j a v a2 s .c o m ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, className); logger.log(Type.DEBUG, "Create EntityManager " + factory.getCreatedClassName()); factory.setSuperclass(AdapterEntityManager.class.getSimpleName()); factory.addImport(AdapterEntityManager.class.getName()); factory.addImport(Entity.class.getName()); factory.addImport(Bean.class.getName()); factory.addImport(HashMap.class.getName()); factory.addImport("javax.annotation.Generated"); JClassType[] types = typeOracle.getTypes(); List<BeanMetadata> metadatas = new ArrayList<EntityManagerGenerator.BeanMetadata>(); for (JClassType type : types) { BeanMetadata metaData = null; boolean candidate = false; if (type.isAnnotationPresent(IsEntity.class)) { candidate = true; try { metaData = createEntity(context, logger, packageName, type, type.getAnnotation(IsEntity.class)); } catch (TypeOracleException e) { logger.log(Type.ERROR, e.getMessage(), e); continue; } } else if (type.isAnnotationPresent(IsBean.class)) { candidate = true; try { metaData = createBean(context, logger, packageName, type, type.getAnnotation(IsBean.class)); } catch (TypeOracleException e) { logger.log(Type.ERROR, e.getMessage(), e); continue; } } if (!candidate) continue; if (metaData == null) { log(logger, Type.WARN, "The type %s is not instantiable", type); continue; } log(logger, Type.DEBUG, "The entity has been build : %s", metaData); factory.addImport(type.getQualifiedSourceName()); if (metaData.implementation != null) { factory.addImport(metaData.implementation + ""); } metadatas.add(metaData); } factory.addAnnotationDeclaration("@Generated(" + "value=\"" + AdapterEntityManager.class.getName() + "\", " + "date=\"" + new Date() + "\", " + "comments=\"Generated by DAO-GWT project.\")"); SourceWriter sourceWriter = factory.createSourceWriter(context, writer); sourceWriter.println("//AUTO GENERATED FILE BY DAO-GWT " + getClass().getName() + ". DO NOT EDIT!\n"); sourceWriter.println( "private static HashMap<Class<?>,Entity<?>> ENTITIES = new HashMap<Class<?>,Entity<?>>();"); sourceWriter.println("private static HashMap<Class<?>,Bean<?>> BEANS = new HashMap<Class<?>,Bean<?>>();"); sourceWriter.println("static {"); sourceWriter.indent(); for (BeanMetadata metaData : metadatas) { String variable = "entity"; String plural = "ENTITIES"; if (!metaData.entity) { variable = "bean"; plural = "BEANS"; } sourceWriter.println("{ //%s with its implementation", metaData.name); sourceWriter.indent(); sourceWriter.println("%s %s = new %s();", metaData.name, variable, metaData.name); sourceWriter.println("%s.put(%s.class,%s);", plural, metaData.type.getName(), variable); if (metaData.implementation != null) { factory.addImport(metaData.implementation.packageName); sourceWriter.println("%s.put(%s.class,%s);", plural, metaData.implementation.className, variable); } sourceWriter.outdent(); sourceWriter.println("}"); } sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); sourceWriter.println("public %s(){", className); sourceWriter.indent(); sourceWriter.println("super(ENTITIES,BEANS);"); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.outdent(); sourceWriter.println("}"); context.commit(logger, writer); return factory.getCreatedClassName(); }
From source file:com.github.ludorival.dao.gwt.rebind.EntityManagerGenerator.java
License:Apache License
private BeanMetadata create(GeneratorContext context, TreeLogger logger, String packageName, JClassType type, Class<?> classAdapter, IsEntity anno) throws TypeOracleException { String beanName = anno == null || anno.aliasName().isEmpty() ? type.getName() : anno.aliasName(); Source implementation = null; JClassType implType = type;//from w ww.j a v a 2 s. c o m TypeOracle typeOracle = context.getTypeOracle(); if (type.isInterface() != null) { implType = null; JClassType[] types = type.getSubtypes(); log(logger, Type.DEBUG, "Get all sub types of %s : %s", type, Arrays.toString(types)); if (types != null && types.length > 0) { for (JClassType jClassType : types) { if (isInstantiable(jClassType, logger)) { implType = jClassType; implementation = new Source(implType.getPackage().getName(), implType.getName()); break; } } } if (implType == null) { log(logger, Type.ERROR, "The type %s has not valid subtypes " + "%s !", type, Arrays.toString(types)); return null; } } if (!implType.isDefaultInstantiable()) return null; String prefix = classAdapter.getSimpleName().replace("Adapter", ""); boolean isEntity = anno != null; String className = prefix + beanName; if (parseOnlyInterface && implType != type) className += "Light"; PrintWriter writer = context.tryCreate(logger, packageName, className); if (writer == null) { return new BeanMetadata(type, className, implementation, isEntity); } ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, className); logger.log(Type.DEBUG, "Create Entity " + factory.getCreatedClassName()); factory.setSuperclass(classAdapter.getSimpleName() + "<" + type.getName() + ">"); factory.addImport(RuntimeException.class.getName()); factory.addImport(classAdapter.getName()); factory.addImport(type.getQualifiedSourceName()); if (isEntity) { factory.addImport(ArrayList.class.getName()); factory.addImport(Collection.class.getName()); } factory.addImport(HashMap.class.getName()); factory.addImport(Property.class.getName()); factory.addImport(Property.class.getName() + ".Kind"); factory.addImport(Index.class.getName()); factory.addImport(implType.getQualifiedSourceName()); factory.addImport("javax.annotation.Generated"); factory.addAnnotationDeclaration("@Generated(" + "value=\"" + AdapterEntity.class.getName() + "\", " + "date=\"" + new Date() + "\", " + "comments=\"Generated by DAO-GWT project.\")"); SourceWriter sourceWriter = factory.createSourceWriter(context, writer); sourceWriter.println("//AUTO GENERATED FILE BY DAO-GWT " + getClass().getName() + ". DO NOT EDIT!\n"); sourceWriter.println("private static HashMap<String,Property<%s,?>> PROPERTIES = " + "new HashMap<String,Property<%s,?>>();", type.getName(), type.getName()); if (isEntity) { factory.addImport(ArrayList.class.getName()); factory.addImport(Index.class.getName()); sourceWriter.println("private static Collection<Index> INDEXES = " + "new ArrayList<Index>();"); } sourceWriter.println("static {"); sourceWriter.indent(); JClassType interfaz = type != implType ? type : null; JMethod[] methods = parseOnlyInterface ? type.getInheritableMethods() : implType.getInheritableMethods(); for (JMethod method : methods) { String name = method.getName(); //Check if the method has a IsIgnored annotation before to continue IsIgnored ignored = method.getAnnotation(IsIgnored.class); if (ignored != null) { log(logger, Type.DEBUG, EXPLICITELY_IGNORED, name, implType); continue; } boolean startsWithGet = name.startsWith("get"); boolean startsWithIs = name.startsWith("is"); if (!startsWithGet && !startsWithIs) { log(logger, Type.DEBUG, IGNORE_METHOD, name, implType); continue; } //check no parameters if (method.getParameterTypes().length != 0) { log(logger, Type.WARN, NO_PARAMETER_GETTER, name, implType); continue; } //check return type JType returnType = method.getReturnType(); if (returnType == null || returnType.getQualifiedSourceName().equals(Void.class.getName()) || returnType.getQualifiedSourceName().equals(void.class.getName())) { log(logger, Type.DEBUG, VOID_GETTER, name + "" + returnType, implType); continue; } //change the format of the name getXyy ==> xyy String getterSetter = name; if (startsWithGet) getterSetter = name.substring(3); else if (startsWithIs) getterSetter = name.substring(2); name = getterSetter.substring(0, 1).toLowerCase() + getterSetter.substring(1); // check if the getter has an annotation IsIndexable indexable = method.getAnnotation(IsIndexable.class); boolean isIndexable = indexable != null; if (isIndexable && !isEntity) log(logger, Type.WARN, ONLY_ENTITY_FOR_INDEX, name, implType, IsEntity.class); isIndexable = isIndexable && isEntity;//only entity can defined indexable element String indexName = isIndexable ? indexable.aliasName() : ""; String[] compositeIndexes = isIndexable ? indexable.compoundWith() : new String[0]; Kind kind = null; JType typeOfCollection = null; String typeOfCollectionString = "null"; if (!isPrimitive(returnType)) { //load complex properties except Key if (returnType.isEnum() != null) { kind = Kind.ENUM; } else { boolean isPrimitive = false; boolean isEnum = false; JParameterizedType pType = returnType.isParameterized(); JType collection = typeOracle.parse(Collection.class.getName()); if (pType != null && pType.getRawType().isAssignableTo(collection.isClassOrInterface())) { JClassType[] types = pType.getTypeArgs(); kind = Kind.COLLECTION_OF_PRIMITIVES; if (types.length > 1) { log(logger, Type.DEBUG, CANNOT_PROCESS_PARAMETERIZED_TYPE, returnType, implType); continue; } typeOfCollection = types[0]; typeOfCollectionString = typeOfCollection.getQualifiedSourceName() + ".class"; log(logger, Type.DEBUG, "The type of the collection is %s", typeOfCollectionString); isPrimitive = isPrimitive(typeOfCollection); isEnum = typeOfCollection.isEnum() != null; } if (!isPrimitive) { if (isEnum && kind != null) { kind = Kind.COLLECTION_OF_ENUMS; } else { JClassType classType = typeOfCollection != null ? typeOfCollection.isClassOrInterface() : returnType.isClassOrInterface(); boolean isBean = isBean(classType); if (isBean) { log(logger, Type.DEBUG, "The property %s is well a type %s", name, classType); if (kind == null) kind = Kind.BEAN; else kind = Kind.COLLECTION_OF_BEANS; } else { log(logger, Type.DEBUG, "The property %s has not a bean type %s", name, classType); continue; } } } } } assert kind != null; boolean isMemo = method.getAnnotation(IsMemo.class) != null; String oldName = "null"; OldName oldNameAnno = method.getAnnotation(OldName.class); if (oldNameAnno != null) oldName = "\"" + oldNameAnno.value() + "\""; //create a property if (kind == Kind.BEAN || kind == Kind.COLLECTION_OF_BEANS) factory.addImport(returnType.getQualifiedSourceName()); String valueType = ""; JClassType classType = returnType.isClassOrInterface(); JPrimitiveType primitiveType = returnType.isPrimitive(); if (classType != null) valueType = classType.getQualifiedSourceName(); else if (primitiveType != null) { valueType = primitiveType.getQualifiedBoxedSourceName(); } sourceWriter.println("{ //Property %s", name); sourceWriter.indent(); sourceWriter.print("Index index ="); if (isIndexable) { if (indexName.isEmpty()) indexName = name; sourceWriter.println("new Index(\"%s\",\"%s\",new String[]{%s});", indexName, name, String.join(",", compositeIndexes)); } else sourceWriter.println("null;"); boolean useKeyAsString = anno != null ? (name.equals(anno.keyName()) ? anno.useKeyAsString() : false) : false; KeyOf keyOf = method.getAnnotation(KeyOf.class); if (keyOf != null) { IsEntity isEntity2 = keyOf.entity().getAnnotation(IsEntity.class); if (isEntity2 == null) { log(logger, Type.ERROR, AdapterEntityManager.KEY_OF_NO_ENTITY, method, keyOf, keyOf.entity(), IsEntity.class); continue; } useKeyAsString = isEntity2.useKeyAsString(); } boolean isHidden = isHidden(method, interfaz); sourceWriter.println( "Property<%s,%s> property = new Property<%s,%s>(\"%s\",%s,%s.class,%s,%s,%s,%s,index,%s){", type.getName(), valueType, type.getName(), valueType, name, oldName, returnType.getQualifiedSourceName(), typeOfCollectionString, kind != null ? "Kind." + kind.name() : "null", useKeyAsString + "", isMemo + "", isHidden + ""); sourceWriter.indent(); sourceWriter.println("@Override"); sourceWriter.println("public %s get(%s instance){", valueType, type.getName()); sourceWriter.indent(); sourceWriter.println("return ((%s)instance).%s();", implType.getName(), startsWithGet ? "get" + getterSetter : "is" + getterSetter); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println("@Override"); sourceWriter.println("public void set(%s instance, %s value){", type.getName(), valueType); sourceWriter.indent(); if (getSetter(implType, getterSetter, returnType) != null) sourceWriter.println("((%s)instance).%s(value);", implType.getName(), "set" + getterSetter); else { logger.log(Type.WARN, " Not found setter for " + getterSetter); sourceWriter.println("throw new RuntimeException(\"No such setter " + getterSetter + " \");"); } sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.outdent(); sourceWriter.println("};"); sourceWriter.println("PROPERTIES.put(\"%s\",property);", name); if (!oldName.equals("null")) { sourceWriter.println("PROPERTIES.put(%s,property);", oldName); } if (isIndexable) sourceWriter.println("INDEXES.add(index);"); sourceWriter.outdent(); sourceWriter.println("}"); log(logger, Type.DEBUG, SUCCESSFUL_ADD_PROPERTY, name + ":" + valueType, implType); } sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); sourceWriter.println("public %s(){", className); sourceWriter.indent(); /* * boolean asyncReady, boolean autoGeneratedFlag, String keyName, boolean useKeyAsString, Class<T> type,Class<? extends T> implType, Map<String, Property<T,?>> mapAllProperties, Collection<Index> indexes) { super(type,implType,mapAllProperties); */ if (isEntity) sourceWriter .println(String.format("super(\"%s\",%s,%s,\"%s\",%s,%s.class,%s.class,PROPERTIES,INDEXES);", anno.aliasName().isEmpty() ? type.getName() : anno.aliasName(), anno.asyncReady(), anno.autoGeneratedKey(), anno.keyName(), anno.useKeyAsString(), type.getName(), implType.getName())); else { sourceWriter.println( String.format("super(%s.class,%s.class,PROPERTIES);", type.getName(), implType.getName())); } sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); sourceWriter.println("@Override"); sourceWriter.println("public %s newInstance(){", type.getName()); sourceWriter.indent(); sourceWriter.println("return new %s();", implType.getName()); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.outdent(); sourceWriter.println("}"); context.commit(logger, writer); return new BeanMetadata(type, className, implementation, isEntity); }
From source file:com.google.appinventor.rebind.ExtendedServiceProxyGenerator.java
License:Open Source License
/** * Generates a wrapper around the proxy generated by * {@link ServiceInterfaceProxyGenerator}. * * @param logger log interface/* ww w . j av a2s. c o m*/ * @param context generator context * @param typeName name of the interface that was passed to * {@link com.google.gwt.core.client.GWT#create(Class)} * @param proxyTypeName the name of the wrapped proxy class * @return the name of the extended proxy class */ private String generateExtendedProxy(TreeLogger logger, GeneratorContext context, String typeName, String proxyTypeName) { JClassType type = context.getTypeOracle().findType(typeName); String packageName = type.getPackage().getName(); String className = type.getSimpleSourceName() + PROXY_SUFFIX; String asyncName = typeName + ASYNC_SUFFIX; String classNameExtendedServiceProxy = "com.google.appinventor.client.ExtendedServiceProxy"; // The generator can be invoked for the same class name more than once. // In this case the GeneratorContext.tryCreate method will return null to // indicate that the file already exists. This is not an error. PrintWriter out = context.tryCreate(logger, packageName, className); if (out != null) { out.println("package " + packageName + ";"); out.println("class " + className); out.println(" extends " + classNameExtendedServiceProxy + "<" + typeName + ">"); out.println(" implements " + ServiceDefTarget.class.getName() + ", " + asyncName + " {"); out.println(" private " + proxyTypeName + " proxy = new " + proxyTypeName + "();"); out.println(" public String getServiceEntryPoint() {"); out.println(" return proxy.getServiceEntryPoint();"); out.println(" }"); out.println(" public void setRpcRequestBuilder(" + RpcRequestBuilder.class.getName() + " builder) {"); out.println(" proxy.setRpcRequestBuilder(builder);"); out.println(" }"); out.println(" public void setServiceEntryPoint(String address) {"); out.println(" proxy.setServiceEntryPoint(address);"); out.println(" }"); out.println(" public String getSerializationPolicyName() {"); out.println(" return proxy.getSerializationPolicyName();"); out.println(" }"); for (JMethod method : type.getMethods()) { printMethod(out, method, typeName); } out.println("}"); context.commit(logger, out); } return packageName + "." + className; }
From source file:com.google.gwt.sample.hellorebinding.rebind.JsniSnippetGenerator.java
License:Apache License
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName, JArgument[] arguments) throws UnableToCompleteException { JClassType snippetType = context.getTypeOracle().findType(typeName); if (snippetType == null) { logger.log(TreeLogger.ERROR, "Rebinding type not found"); throw new UnableToCompleteException(); }//from w ww . j av a 2 s .c om if (arguments.length < 1) { logger.log(TreeLogger.ERROR, "Missing JSNI literal argument"); throw new UnableToCompleteException(); } JArgument arg0 = arguments[0]; if (!(arg0 instanceof JStringArgument)) { logger.log(TreeLogger.ERROR, "JSNI literal argument must be a String literal"); throw new UnableToCompleteException(); } String argumentsKey = JArguments.getKey(arguments); String packageName = snippetType.getPackage().getName(); String snippetTypeName = snippetType.getSimpleSourceName() + "_impl_" + argumentsKey; String qualifiedSnippetTypeName = packageName + "." + snippetTypeName; PrintWriter pw = context.tryCreate(logger, packageName, snippetTypeName); if (pw != null) { int argCount = argumentsCount(snippetType); if (argCount < 0) { logger.log(TreeLogger.ERROR, "execute() method not found"); throw new UnableToCompleteException(); } String jsniTemplate = ((JStringArgument) arg0).getValue(); String[] parts = jsniTemplate.split("#", -1); if (parts.length != (argCount + 1)) { logger.log(TreeLogger.ERROR, "wrong number of snippet arguments"); throw new UnableToCompleteException(); } pw.printf("package %s;\n\n", packageName); pw.printf("public class %s implements %s {\n\n", snippetTypeName, snippetType.getSimpleSourceName()); pw.printf(" public %s(String jsniLiteral) {}\n", snippetTypeName); pw.println(); pw.print(" @Override public native <T> T execute("); boolean hasSeparator = false; for (int i = 0; i < argCount; i++) { if (hasSeparator) { pw.print(", "); } else { hasSeparator = true; } pw.printf("Object a%d", i); } pw.println(") /*-{"); pw.print(" return "); if (argCount == 0) { pw.print(jsniTemplate); } else { for (int i = 0; i < argCount; i++) { pw.printf("%sa%d", parts[i], i); } pw.print(parts[argCount]); } pw.println(";"); pw.println(" }-*/;"); pw.println("}"); context.commit(logger, pw); } return qualifiedSnippetTypeName; }