Example usage for com.google.gwt.core.ext.typeinfo JMethod getTypeParameters

List of usage examples for com.google.gwt.core.ext.typeinfo JMethod getTypeParameters

Introduction

In this page you can find the example usage for com.google.gwt.core.ext.typeinfo JMethod getTypeParameters.

Prototype

JTypeParameter[] getTypeParameters();

Source Link

Document

Returns the type parameters on this element.

Usage

From source file:com.google.web.bindery.requestfactory.gwt.rebind.RequestFactoryGenerator.java

License:Apache License

private void writeContextImplementations() {
    for (ContextMethod method : model.getMethods()) {
        PrintWriter pw = context.tryCreate(logger, method.getPackageName(), method.getSimpleSourceName());
        if (pw == null) {
            // Already generated
            continue;
        }// w  ww.  j a  v  a 2  s  . co  m

        ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(method.getPackageName(),
                method.getSimpleSourceName());
        factory.setSuperclass(AbstractRequestContext.class.getCanonicalName());
        factory.addImplementedInterface(method.getImplementedInterfaceQualifiedSourceName());
        SourceWriter sw = factory.createSourceWriter(context, pw);

        // Constructor that accepts the parent RequestFactory
        sw.println("public %s(%s requestFactory) {super(requestFactory, %s.%s);}", method.getSimpleSourceName(),
                AbstractRequestFactory.class.getCanonicalName(), Dialect.class.getCanonicalName(),
                method.getDialect().name());

        Set<EntityProxyModel> models = findReferencedEntities(method);
        Set<JEnumType> extraEnumTypes = findExtraEnums(method);
        writeAutoBeanFactory(sw, models, extraEnumTypes);

        // Write each Request method
        for (RequestMethod request : method.getRequestMethods()) {
            JMethod jmethod = request.getDeclarationMethod();
            String operation = request.getOperation();

            // foo, bar, baz
            StringBuilder parameterArray = new StringBuilder();
            // final Foo foo, final Bar bar, final Baz baz
            StringBuilder parameterDeclaration = new StringBuilder();
            // <P extends Blah>
            StringBuilder typeParameterDeclaration = new StringBuilder();

            if (request.isInstance()) {
                // Leave a spot for the using() method to fill in later
                parameterArray.append(",null");
            }
            for (JTypeParameter param : jmethod.getTypeParameters()) {
                typeParameterDeclaration.append(",").append(param.getQualifiedSourceName());
            }
            for (JParameter param : jmethod.getParameters()) {
                parameterArray.append(",").append(param.getName());
                parameterDeclaration.append(",final ")
                        .append(param.getType().getParameterizedQualifiedSourceName()).append(" ")
                        .append(param.getName());
            }
            if (parameterArray.length() > 0) {
                parameterArray.deleteCharAt(0);
            }
            if (parameterDeclaration.length() > 0) {
                parameterDeclaration.deleteCharAt(0);
            }
            if (typeParameterDeclaration.length() > 0) {
                typeParameterDeclaration.deleteCharAt(0).insert(0, "<").append(">");
            }

            // public Request<Foo> doFoo(final Foo foo) {
            sw.println("public %s %s %s(%s) {", typeParameterDeclaration,
                    jmethod.getReturnType().getParameterizedQualifiedSourceName(), jmethod.getName(),
                    parameterDeclaration);
            sw.indent();
            // The implements clause covers InstanceRequest
            // class X extends AbstractRequest<Return> implements Request<Return> {
            sw.println("class X extends %s<%s> implements %s {", AbstractRequest.class.getCanonicalName(),
                    request.getDataType().getParameterizedQualifiedSourceName(),
                    jmethod.getReturnType().getParameterizedQualifiedSourceName());
            sw.indent();

            // public X() { super(FooRequestContext.this); }
            sw.println("public X() { super(%s.this);}", method.getSimpleSourceName());

            // This could also be gotten rid of by having only Request /
            // InstanceRequest
            sw.println("@Override public X with(String... paths) {super.with(paths); return this;}");

            // makeRequestData()
            sw.println("@Override protected %s makeRequestData() {", RequestData.class.getCanonicalName());
            String elementType = request.isCollectionType()
                    ? request.getCollectionElementType().getQualifiedSourceName() + ".class"
                    : "null";
            String returnTypeBaseQualifiedName = ModelUtils.ensureBaseType(request.getDataType())
                    .getQualifiedSourceName();
            // return new RequestData("ABC123", {parameters}, propertyRefs,
            // List.class, FooProxy.class);
            sw.indentln("return new %s(\"%s\", new Object[] {%s}, propertyRefs, %s.class, %s);",
                    RequestData.class.getCanonicalName(), operation, parameterArray,
                    returnTypeBaseQualifiedName, elementType);
            sw.println("}");

            /*
             * Only support extra properties in JSON-RPC payloads. Could add this to
             * standard requests to provide out-of-band data.
             */
            if (method.getDialect().equals(Dialect.JSON_RPC)) {
                for (JMethod setter : request.getExtraSetters()) {
                    PropertyName propertyNameAnnotation = setter.getAnnotation(PropertyName.class);
                    String propertyName = propertyNameAnnotation == null ? JBeanMethod.SET.inferName(setter)
                            : propertyNameAnnotation.value();
                    String maybeReturn = JBeanMethod.SET_BUILDER.matches(setter) ? "return this;" : "";
                    sw.println("%s { getRequestData().setNamedParameter(\"%s\", %s); %s}",
                            setter.getReadableDeclaration(false, false, false, false, true), propertyName,
                            setter.getParameters()[0].getName(), maybeReturn);
                }
            }

            // end class X{}
            sw.outdent();
            sw.println("}");

            // Instantiate, enqueue, and return
            sw.println("X x = new X();");

            if (request.getApiVersion() != null) {
                sw.println("x.getRequestData().setApiVersion(\"%s\");",
                        Generator.escape(request.getApiVersion()));
            }

            // JSON-RPC payloads send their parameters in a by-name fashion
            if (method.getDialect().equals(Dialect.JSON_RPC)) {
                for (JParameter param : jmethod.getParameters()) {
                    PropertyName annotation = param.getAnnotation(PropertyName.class);
                    String propertyName = annotation == null ? param.getName() : annotation.value();
                    boolean isContent = param.isAnnotationPresent(JsonRpcContent.class);
                    if (isContent) {
                        sw.println("x.getRequestData().setRequestContent(%s);", param.getName());
                    } else {
                        sw.println("x.getRequestData().setNamedParameter(\"%s\", %s);", propertyName,
                                param.getName());
                    }
                }
            }

            // See comment in AbstractRequest.using(EntityProxy)
            if (!request.isInstance()) {
                sw.println("addInvocation(x);");
            }
            sw.println("return x;");
            sw.outdent();
            sw.println("}");
        }

        sw.commit(logger);
    }
}

From source file:org.kjots.json.object.gwt.rebind.GwtJsonObjectGenerator.java

License:Apache License

/**
 * Write a function method.//from  w  ww.  j av  a2  s . c om
 *
 * @param sourceWriter The source writer.
 * @param logger The logger.
 * @param context The context.
 * @param method The method.
 * @param jsonFunctionAnnotation The JSON function annotation.
 * @throws UnableToCompleteException
 */
private void writeFunctionMethod(SourceWriter sourceWriter, TreeLogger logger, GeneratorContext context,
        JMethod method, JsonFunction jsonFunctionAnnotation) throws UnableToCompleteException {
    Class<?> functionClass = jsonFunctionAnnotation.klass();
    String functionMethodName = jsonFunctionAnnotation.method();

    StringBuilder typeParametersBuilder = new StringBuilder();

    JTypeParameter[] typeParameters = method.getTypeParameters();
    if (typeParameters.length != 0) {
        typeParametersBuilder.append("<");

        for (int i = 0; i < typeParameters.length; i++) {
            if (i != 0) {
                typeParametersBuilder.append(", ");
            }

            typeParametersBuilder.append(typeParameters[i].getQualifiedSourceName());
        }

        typeParametersBuilder.append("> ");
    }

    String returnTypeName = this.getTypeName(method.getReturnType());

    JClassType functionClassType = this.getType(logger, context, functionClass.getName().replace('$', '.'));

    StringBuilder methodParametersBuilder = new StringBuilder();
    StringBuilder functionArgumentsBuilder = new StringBuilder("this");

    JParameter[] methodParameters = method.getParameters();
    for (int i = 0; i < methodParameters.length; i++) {
        if (i != 0) {
            methodParametersBuilder.append(", ");
        }

        methodParametersBuilder.append(this.getTypeName(methodParameters[i].getType()));
        methodParametersBuilder.append(" arg").append(i);

        functionArgumentsBuilder.append(", arg").append(i);
    }

    sourceWriter.println("@Override");
    sourceWriter.println("public final " + typeParametersBuilder.toString() + returnTypeName + " "
            + method.getName() + "(" + methodParametersBuilder.toString() + ") {");
    sourceWriter.indent();
    sourceWriter.println(
            (!returnTypeName.equals("void") ? "return " : "") + functionClassType.getQualifiedSourceName() + "."
                    + functionMethodName + "(" + functionArgumentsBuilder.toString() + ");");
    sourceWriter.outdent();
    sourceWriter.println("}");
}

From source file:org.kjots.json.object.gwt.rebind.GwtJsonObjectGenerator.java

License:Apache License

/**
 * Write an exception method./*from w  ww  . j av a2s .co  m*/
 *
 * @param sourceWriter The source writer.
 * @param logger The logger.
 * @param context The context.
 * @param method The method.
 * @param jsonExceptionAnnotation The JSON exception annotation.
 * @throws UnableToCompleteException
 */
private void writeExceptionMethod(SourceWriter sourceWriter, TreeLogger logger, GeneratorContext context,
        JMethod method, JsonException jsonExceptionAnnotation) throws UnableToCompleteException {
    Class<?> exceptionClass = jsonExceptionAnnotation.klass();
    String message = jsonExceptionAnnotation.message();

    StringBuilder typeParametersBuilder = new StringBuilder();

    JTypeParameter[] typeParameters = method.getTypeParameters();
    if (typeParameters.length != 0) {
        typeParametersBuilder.append("<");

        for (int i = 0; i < typeParameters.length; i++) {
            if (i != 0) {
                typeParametersBuilder.append(", ");
            }

            typeParametersBuilder.append(typeParameters[i].getQualifiedSourceName());
        }

        typeParametersBuilder.append("> ");
    }

    String returnTypeName = this.getTypeName(method.getReturnType());

    StringBuilder methodParametersBuilder = new StringBuilder();

    JParameter[] methodParameters = method.getParameters();
    for (int i = 0; i < methodParameters.length; i++) {
        if (i != 0) {
            methodParametersBuilder.append(", ");
        }

        methodParametersBuilder.append(this.getTypeName(methodParameters[i].getType()));
        methodParametersBuilder.append(" arg").append(i);
    }

    JClassType exceptionClassType = this.getType(logger, context, exceptionClass.getName().replace('$', '.'));

    sourceWriter.println("@Override");
    sourceWriter.println("public final " + typeParametersBuilder.toString() + returnTypeName + " "
            + method.getName() + "(" + methodParametersBuilder.toString() + ") {");
    sourceWriter.indent();
    sourceWriter.println("throw new " + exceptionClassType.getQualifiedSourceName() + "("
            + (!message.isEmpty() ? toQuotedString(message) : "") + ");");
    sourceWriter.outdent();
    sourceWriter.println("}");
}