List of usage examples for com.google.gwt.user.rebind SourceWriter indentln
void indentln(String s, Object... args);
From source file:com.sencha.gxt.state.rebind.StateManagerGenerator.java
License:sencha.com license
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { TypeOracle oracle = context.getTypeOracle(); JClassType type = oracle.findType(typeName); JClassType stateMangerType = oracle.findType(Name.getSourceNameForClass(StateManager.class)); if (type == null || type.isClass() == null || !type.isAssignableTo(stateMangerType)) { logger.log(Type.ERROR, "This generator only can function on StateManager subtypes"); throw new UnableToCompleteException(); }// w w w. j a v a 2s.co m String abf; try { abf = context.getPropertyOracle().getConfigurationProperty(STATE_MANAGER_ABF).getValues().get(0); } catch (BadPropertyValueException ex) { logger.log(Type.ERROR, "Could not read property for " + STATE_MANAGER_ABF, ex); throw new UnableToCompleteException(); } JClassType abfType = oracle.findType(abf); if (abfType == null) { logger.log(Type.ERROR, "Cannot find type " + abf + " in gwt classpath"); throw new UnableToCompleteException(); } String packageName = abfType.getPackage().getName(); String simpleSourceName = "StateManagerImpl_" + abfType.getName().replace('.', '_'); PrintWriter pw = context.tryCreate(logger, packageName, simpleSourceName); if (pw == null) { return packageName + "." + simpleSourceName; } ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, simpleSourceName); factory.setSuperclass(typeName); factory.addImport(Name.getSourceNameForClass(GWT.class)); SourceWriter sw = factory.createSourceWriter(context, pw); sw.println("public %1$s getStateBeanFactory() {", abf); sw.indentln("return GWT.create(%1$s.class);", abf); sw.println("}"); sw.commit(logger); return factory.getCreatedClassName(); }
From source file:org.jboss.as.console.rebind.extensions.SubsystemExtensionProcessorGenerator.java
License:Apache License
private void generateClass(TreeLogger logger, GeneratorContext context, String packageName, String className, List<SubsystemExtension> subsystemExtensions) { PrintWriter pw = context.tryCreate(logger, packageName, className); if (pw == null) { return;//from w w w . j av a 2 s . c om } ClassSourceFileComposerFactory composerFactory = new ClassSourceFileComposerFactory(packageName, className); // imports composerFactory.addImport(ArrayList.class.getCanonicalName()); composerFactory.addImport(LinkedHashMap.class.getCanonicalName()); composerFactory.addImport(List.class.getCanonicalName()); composerFactory.addImport(Map.class.getCanonicalName()); composerFactory.addImport(SubsystemExtensionProcessor.class.getCanonicalName()); composerFactory.addImport(SubsystemGroup.class.getCanonicalName()); composerFactory.addImport(SubsystemGroupItem.class.getCanonicalName()); composerFactory.addImport(Predicate.class.getCanonicalName()); composerFactory.addImport(LHSNavTreeItem.class.getCanonicalName()); // interface composerFactory.addImplementedInterface(SubsystemExtensionProcessor.class.getCanonicalName()); SourceWriter sw = composerFactory.createSourceWriter(context, pw); // begin class definition sw.indent(); // fields sw.println( "private final Map<String, SubsystemGroup> extensionGroups = new LinkedHashMap<String, SubsystemGroup>();"); sw.println("private final List<Predicate> _runtimeMetricsExtensions = new ArrayList<Predicate>();"); sw.println("private final List<Predicate> _runtimeOperationsExtensions = new ArrayList<Predicate>();"); // constructor sw.println("public " + className + "() {"); sw.indent(); for (SubsystemExtension extension : subsystemExtensions) { for (SubsystemGroupDefinition groupDef : extension.groups()) { sw.println("SubsystemGroup group;"); sw.println("if (extensionGroups.containsKey(\"%s\")) {", groupDef.name()); sw.indentln("group = extensionGroups.get(\"%s\");", groupDef.name()); sw.println("} else {"); sw.indent(); sw.println("group = new SubsystemGroup(\"%s\");", groupDef.name()); sw.println("extensionGroups.put(group.getName(), group);"); sw.outdent(); sw.println("}"); for (SubsystemItemDefinition itemDef : groupDef.items()) { sw.println("group.getItems().add(new SubsystemGroupItem(\"%s\", \"%s\", \"%s\"));", itemDef.name(), extension.subsystem(), itemDef.presenter()); } } for (SubsystemItemDefinition runtimeItemDef : extension.metrics()) { sw.println( "_runtimeMetricsExtensions.add(new Predicate(\"%s\", new LHSNavTreeItem(\"%s\", \"%s\")));", extension.subsystem(), runtimeItemDef.name(), runtimeItemDef.presenter()); } for (SubsystemItemDefinition runtimeItemDef : extension.runtime()) { sw.println( "_runtimeOperationsExtensions.add(new Predicate(\"%s\", new LHSNavTreeItem(\"%s\", \"%s\")));", extension.subsystem(), runtimeItemDef.name(), runtimeItemDef.presenter()); } } sw.outdent(); sw.println("}"); // methods // processProfileExtensions sw.println("public void processProfileExtensions(Map<String, SubsystemGroup> groups) {"); sw.indent(); sw.println("for (Map.Entry<String, SubsystemGroup> entry : extensionGroups.entrySet()) {"); sw.indent(); sw.println("if (groups.containsKey(entry.getKey())) {"); sw.indent(); sw.println("SubsystemGroup group = groups.get(entry.getKey());"); sw.println("group.getItems().addAll(entry.getValue().getItems());"); sw.outdent(); sw.println("} else {"); sw.indent(); sw.println("SubsystemGroup group = entry.getValue();"); sw.println("groups.put(group.getName(), group);"); sw.outdent(); sw.println("}"); sw.outdent(); sw.println("}"); sw.outdent(); sw.println("}"); // getRuntimeMetricsExtensions sw.println("public List<Predicate> getRuntimeMetricsExtensions() {"); sw.indentln("return _runtimeMetricsExtensions;"); sw.println("}"); // getRuntimeOperationsExtensions sw.println("public List<Predicate> getRuntimeOperationsExtensions() {"); sw.indentln("return _runtimeOperationsExtensions;"); sw.println("}"); // close it out sw.outdent(); sw.println("}"); context.commit(logger, pw); }
From source file:sheath.rebind.SheathGenerator.java
License:Apache License
@Override public RebindResult generateIncrementally(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { TypeOracle oracle = context.getTypeOracle(); JClassType toGenerate = oracle.findType(typeName).isInterface(); if (toGenerate == null) { logger.log(TreeLogger.ERROR, typeName + " is not an interface type"); throw new UnableToCompleteException(); }/* w w w . j a v a 2s.co m*/ JClassType sheathType = oracle.findType(Sheath.class.getCanonicalName()); if (!toGenerate.isAssignableTo(sheathType)) { logger.log(TreeLogger.ERROR, typeName + " is not assignable to " + Sheath.class.getCanonicalName()); throw new UnableToCompleteException(); } if (toGenerate.equals(sheathType)) { logger.log(TreeLogger.ERROR, "You must declare an interface that extends " + Sheath.class.getCanonicalName()); throw new UnableToCompleteException(); } // TODO: really generate incrementally! Class<?>[] moduleClasses = collectAllModules(logger, toGenerate); Map<String, String> injectableTypes = new LinkedHashMap<String, String>(); Set<Class<?>> staticInjections = new LinkedHashSet<Class<?>>(); for (Class<?> module : moduleClasses) { Module annotation = module.getAnnotation(Module.class); String moduleName = module.getCanonicalName(); for (Class<?> key : annotation.injects()) { injectableTypes.put(key.getName(), moduleName); } for (Class<?> c : annotation.staticInjections()) { staticInjections.add(c); } } String packageName = toGenerate.getPackage().getName(); String simpleSourceName = toGenerate.getName().replace('.', '_') + "Impl"; PrintWriter pw = context.tryCreate(logger, packageName, simpleSourceName); if (pw == null) { return new RebindResult(RebindMode.USE_ALL_NEW_WITH_NO_CACHING, packageName + "." + simpleSourceName); } ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, simpleSourceName); factory.setSuperclass(AbstractSheath.class.getCanonicalName()); factory.addImplementedInterface(typeName); SourceWriter sw = factory.createSourceWriter(context, pw); // Linker sw.println("private static class Plugin extends AbstractSheathPlugin {"); sw.indent(); sw.println("@java.lang.Override"); sw.println( "public native %1$s<?> getAtInjectBinding(%2$s key, %2$s className, boolean mustBeInjectable) /*-{", Binding.class.getCanonicalName(), String.class.getCanonicalName()); sw.indent(); sw.println("switch (className) {"); LinkedHashMap<String, String> factoryMethodsToGenerate = new LinkedHashMap<String, String>(); for (JClassType type : oracle.getTypes()) { // XXX: workaround for http://code.google.com/p/google-web-toolkit/issues/detail?id=6799 // We really should use type.getName().endsWith("$$InjectAdapter") but GWT makes a JClassType // with name "InjectAdapter", thinking it's a nested class, and we lose the part before the // dollar. So in the mean time, look for the InjectAdapter in the classpath FOR EACH CLASS, // and we additionally generate a non-JSNI class to instantiate it, so that processing of the // class name is done by JDT rather than GWT's TypeOracle. String adapterName = type.getQualifiedSourceName() + "$$InjectAdapter"; boolean found; try { Class.forName(adapterName, false, Thread.currentThread().getContextClassLoader()); found = true; } catch (Throwable t) { found = false; } if (found /*&& type.isAssignableTo(oracle.findType(Binding.class.getCanonicalName()))*/) { String name = type.getQualifiedSourceName(); String factoryName = "create_" + name.replace('.', '_') + "_InjectAdapter"; factoryMethodsToGenerate.put(adapterName, factoryName); sw.println("case '%s': return this.@%s.Plugin::%s()();", name, factory.getCreatedClassName(), factoryName); } } sw.println("default: return null;"); sw.println("}"); sw.outdent(); sw.println("}-*/;"); for (Map.Entry<String, String> factoryMethodToGenerate : factoryMethodsToGenerate.entrySet()) { sw.println(); sw.println("private %s %s() {", factoryMethodToGenerate.getKey(), factoryMethodToGenerate.getValue()); sw.indentln("return new %s();", factoryMethodToGenerate.getKey()); sw.println("}"); } sw.println(); sw.println("@java.lang.Override"); sw.println("public %s[] createStaticInjections() {", StaticInjection.class.getCanonicalName()); sw.indent(); sw.println("return new %s[] {", StaticInjection.class.getCanonicalName()); sw.indent(); for (Class<?> staticInjection : staticInjections) { sw.println("new %s$$StaticInjection(),", staticInjection.getName()); } sw.outdent(); sw.println("};"); sw.outdent(); sw.println("}"); sw.outdent(); sw.print("}"); // Constructor sw.println(); sw.println("public %s() {", simpleSourceName); sw.indent(); sw.println("super(new Plugin(), "); sw.println("new %s<?>[] {", ModuleAdapter.class.getCanonicalName()); sw.indent(); for (Class<?> module : moduleClasses) { sw.println("new %s$$ModuleAdapter(),", module.getName()); } sw.outdent(); sw.println("});"); sw.outdent(); sw.outdent(); sw.println("}"); for (JMethod method : toGenerate.getOverridableMethods()) { // TODO: check arguments (number, injectable types) if (method.getParameterTypes().length != 1) { // could be injectStatics() continue; } JType toInject = method.getParameterTypes()[0]; sw.println("@java.lang.Override"); sw.println("public %s %s(%s instance) {", method.getReturnType().getParameterizedQualifiedSourceName(), method.getName(), toInject.getParameterizedQualifiedSourceName()); sw.indent(); sw.println("doInject(instance, \"members/%s\", %s.class);", toInject.getParameterizedQualifiedSourceName(), injectableTypes.get(toInject.getQualifiedBinaryName())); if (!JPrimitiveType.VOID.equals(method.getReturnType())) { sw.println("return arg;"); } sw.outdent(); sw.println("}"); } sw.commit(logger); return new RebindResult(RebindMode.USE_ALL_NEW_WITH_NO_CACHING, packageName + "." + simpleSourceName); }