List of usage examples for com.google.gwt.dev.generator NameFactory createName
public String createName(String name)
name and adds it to the list of known names. 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("}"); }