Example usage for com.google.gwt.dev.generator NameFactory createName

List of usage examples for com.google.gwt.dev.generator NameFactory createName

Introduction

In this page you can find the example usage for com.google.gwt.dev.generator NameFactory createName.

Prototype

public String createName(String name) 

Source Link

Document

Creates a new unique name based off of name and adds it to the list of known names.

Usage

From source file:org.rapla.rest.gwtjsonrpc.rebind.ProxyCreator.java

License:Apache License

private void generateProxyMethod(@SuppressWarnings("unused") final TreeLogger logger, final JMethod method,
        final SourceWriter w) {
    final JParameter[] params = method.getParameters();
    final JType callback = method.getReturnType();// params[params.length - 1];
    JType resultType = callback;//  ww  w.  j a v a  2  s .  c  om
    //    final JClassType resultType =
    //        callback.isParameterized().getTypeArgs()[0];
    final String[] serializerFields = new String[params.length];
    String resultField = "";

    w.println();
    for (int i = 0; i < params.length /*- 1*/; i++) {
        final JType pType = params[i].getType();
        if (SerializerCreator.needsTypeParameter(pType)) {
            serializerFields[i] = "serializer_" + instanceField++;
            w.print("private static final ");
            if (pType.isArray() != null)
                w.print(serializerCreator.serializerFor(pType));
            else
                w.print(JsonSerializer.class.getName());
            w.print(" ");
            w.print(serializerFields[i]);
            w.print(" = ");
            serializerCreator.generateSerializerReference(pType, w, false);
            w.println(";");
        }
    }
    JClassType parameterizedResult = null;
    if (resultType.isParameterized() != null) {
        resultField = "serializer_" + instanceField++;
        w.print("private static final ");
        w.print(ResultDeserializer.class.getName());
        w.print(" ");
        w.print(resultField);
        w.print(" = ");
        parameterizedResult = resultType.isParameterized().getTypeArgs()[0];
        serializerCreator.generateSerializerReference(parameterizedResult, w, false);
        w.println(";");
    }

    w.print("public ");
    w.print(method.getReturnType().getQualifiedSourceName());
    w.print(" ");
    w.print(method.getName());
    w.print("(");
    boolean needsComma = false;
    final NameFactory nameFactory = new NameFactory();
    for (int i = 0; i < params.length; i++) {
        final JParameter param = params[i];

        if (needsComma) {
            w.print(", ");
        } else {
            needsComma = true;
        }

        final JType paramType = param.getType().getErasedType();
        w.print(paramType.getQualifiedSourceName());
        w.print(" ");

        nameFactory.addName(param.getName());
        w.print(param.getName());
    }

    w.println(") {");
    w.indent();

    if (returnsCallbackHandle(method)) {
        w.print("return new ");
        w.print(CallbackHandle.class.getName());
        w.print("(");
        if (SerializerCreator.needsTypeParameter(resultType)) {
            w.print(resultField);
        } else {
            deserializerCreator.generateDeserializerReference(resultType, w);
        }
        w.print(", " + "null" // callback.getName()
        );
        w.println(");");
        w.outdent();
        w.println("}");
        return;
    }

    //    final HostPageCache hpc = method.getAnnotation(HostPageCache.class);
    //    if (hpc != null) {
    //      final String objName = nameFactory.createName("cached");
    //      w.print("final JavaScriptObject " + objName + " = ");
    //      w.print(AbstractJsonProxy.class.getName());
    //      w.print(".");
    //      w.print(hpc.once() ? "hostPageCacheGetOnce" : "hostPageCacheGetMany");
    //      w.println("(\"" + hpc.name() + "\");");
    //      w.println("if (" + objName + " != null) {");
    //      w.indent();
    //      w.print(JsonUtil.class.getName());
    //      w.print(".invoke(");
    //      if (SerializerCreator.needsTypeParameter(resultType)) {
    //        w.print(resultField);
    //      } else {
    //        deserializerCreator.generateDeserializerReference(resultType, w);
    //      }
    //     // w.print(", " + callback.getName());
    //      w.print(", " + "null");
    //      w.print(", " + objName);
    //      w.println(");");
    //      w.println("return;");
    //      w.outdent();
    //      w.println("}");
    //    }

    final String reqDataStr;
    if (params.length == 0) {
        reqDataStr = "\"[]\"";
    } else {
        final String reqData = nameFactory.createName("reqData");
        w.println("final StringBuilder " + reqData + " = new StringBuilder();");
        needsComma = false;
        w.println(reqData + ".append('[');");
        for (int i = 0; i < params.length; i++) {
            if (needsComma) {
                w.println(reqData + ".append(\",\");");
            } else {
                needsComma = true;
            }

            final JType pType = params[i].getType();
            final String pName = params[i].getName();
            if (pType == JPrimitiveType.CHAR || SerializerCreator.isBoxedCharacter(pType)) {
                w.println(reqData + ".append(\"\\\"\");");
                w.println(reqData + ".append(" + JsonSerializer.class.getSimpleName() + ".escapeChar(" + pName
                        + "));");
                w.println(reqData + ".append(\"\\\"\");");
            } else if ((SerializerCreator.isJsonPrimitive(pType) || SerializerCreator.isBoxedPrimitive(pType))
                    && !SerializerCreator.isJsonString(pType)) {
                w.println(reqData + ".append(" + pName + ");");
            } else {
                w.println("if (" + pName + " != null) {");
                w.indent();
                if (SerializerCreator.needsTypeParameter(pType)) {
                    w.print(serializerFields[i]);
                } else {
                    serializerCreator.generateSerializerReference(pType, w, false);
                }
                w.println(".printJson(" + reqData + ", " + pName + ");");
                w.outdent();
                w.println("} else {");
                w.indent();
                w.println(reqData + ".append(" + JsonSerializer.class.getName() + ".JS_NULL);");
                w.outdent();
                w.println("}");
            }
        }
        w.println(reqData + ".append(']');");
        reqDataStr = reqData + ".toString()";
    }

    String resultClass = futureResultClassName;
    if (parameterizedResult != null) {
        resultClass += "<" + parameterizedResult.getQualifiedSourceName() + ">";
    }
    w.println(resultClass + " result = new " + resultClass + "();");
    w.print("doInvoke(");
    w.print("\"" + method.getName() + "\"");
    w.print(", " + reqDataStr);
    w.print(", ");
    if (resultType.isParameterized() != null) {
        w.print(resultField);
    } else {
        deserializerCreator.generateDeserializerReference(resultType, w);
    }

    //w.print(", " + callback.getName());
    w.print(", result");

    w.println(");");
    w.println("return result;");

    w.outdent();
    w.println("}");
}