Example usage for com.google.gwt.user.rebind SourceWriter indentln

List of usage examples for com.google.gwt.user.rebind SourceWriter indentln

Introduction

In this page you can find the example usage for com.google.gwt.user.rebind SourceWriter indentln.

Prototype

void indentln(String s, Object... args);

Source Link

Document

Emit a printf-style string.

Usage

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);
}