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

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

Introduction

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

Prototype

JClassType[] getThrows();

Source Link

Usage

From source file:com.google.gwt.testing.easygwtmock.rebind.MocksGenerator.java

License:Apache License

/**
 * Prints required fields for mock class.
 *///from   www . j a  va 2 s.co  m
private void printFields(SourceWriter sourceWriter, List<JMethod> methodsToMock) {

    StringBuilder throwableArray = new StringBuilder("private static final Class<?>[][] throwables = {");
    StringBuilder argumentTypesArray = new StringBuilder("private static final Class<?>[][] argumentTypes = {");
    StringBuilder methodArray = new StringBuilder("private static final Method[] methods = {");

    for (int i = 0; i < methodsToMock.size(); i++) {
        JMethod method = methodsToMock.get(i);

        throwableArray.append("{");
        for (JClassType throwable : method.getThrows()) {
            throwableArray.append(throwable.getQualifiedSourceName()).append(".class, ");
        }
        if (method.getThrows().length != 0) {
            throwableArray.setLength(throwableArray.length() - 2);
        }
        throwableArray.append("}, ");

        argumentTypesArray.append("{");
        for (JType argumentType : method.getParameterTypes()) {
            argumentTypesArray.append(argumentType.getErasedType().getQualifiedSourceName()).append(".class, ");
        }
        if (method.getParameterTypes().length != 0) {
            argumentTypesArray.setLength(argumentTypesArray.length() - 2);
        }
        argumentTypesArray.append("}, ");

        methodArray.append("new Method(\"").append(method.getName()).append("\", ")
                .append(method.getReturnType().getErasedType().getQualifiedSourceName())
                .append(".class, argumentTypes[").append(i).append("], ").append("throwables[").append(i)
                .append("]), ");
    }

    if (methodsToMock.size() != 0) {
        throwableArray.setLength(throwableArray.length() - 2);
        argumentTypesArray.setLength(argumentTypesArray.length() - 2);
        methodArray.setLength(methodArray.length() - 2);
    }
    throwableArray.append("};");
    argumentTypesArray.append("};");
    methodArray.append("};");

    sourceWriter.println(throwableArray.toString());
    sourceWriter.println(argumentTypesArray.toString());
    sourceWriter.println(methodArray.toString());
    sourceWriter.println("private MocksControlBase mocksControl;");
    sourceWriter.println();
}

From source file:com.google.gwt.testing.easygwtmock.rebind.MocksGenerator.java

License:Apache License

private void printMockMethodBody(SourceWriter sourceWriter, JMethod method, int methodNo, String newClassName) {

    JParameter[] args = method.getParameters();

    String callVar = freeVariableName("call", args);
    sourceWriter.print("Call %s = new Call(this, %s.methods[%d]", callVar, newClassName, methodNo);

    int argsCount = method.isVarArgs() ? args.length - 1 : args.length;

    for (int i = 0; i < argsCount; i++) {
        sourceWriter.print(", %s", args[i].getName());
    }/*  ww w . jav a 2  s  .  c  o  m*/
    sourceWriter.println(");");

    if (method.isVarArgs()) {
        sourceWriter.println("%s.addVarArgument(%s);", callVar, args[args.length - 1].getName());
    }

    sourceWriter.println("try {");
    sourceWriter.indent();

    if (!isVoid(method)) {
        sourceWriter.print("return (");

        JType returnType = method.getReturnType();
        JPrimitiveType primitiveType = returnType.isPrimitive();
        if (primitiveType != null) {
            sourceWriter.print(primitiveType.getQualifiedBoxedSourceName());
        } else if (returnType.isTypeParameter() != null) {
            sourceWriter.print(returnType.isTypeParameter().getName());
        } else {
            sourceWriter.print(returnType.getQualifiedSourceName());
        }

        sourceWriter.print(") ");
    }

    sourceWriter.println("this.mocksControl.invoke(%s).answer(%s.getArguments().toArray());", callVar, callVar);
    sourceWriter.outdent();

    String exceptionVar = freeVariableName("exception", args);
    sourceWriter.println("} catch (Throwable %s) {", exceptionVar);
    sourceWriter.indent();

    String assertionError = AssertionErrorWrapper.class.getCanonicalName();
    sourceWriter.println(
            "if (%s instanceof %s) throw (AssertionError) "
                    + "((%s) %s).getAssertionError().fillInStackTrace();",
            exceptionVar, assertionError, assertionError, exceptionVar);

    for (JClassType exception : method.getThrows()) {
        printRethrowException(sourceWriter, exceptionVar, exception.getQualifiedSourceName());
    }
    printRethrowException(sourceWriter, exceptionVar, "RuntimeException");
    printRethrowException(sourceWriter, exceptionVar, "Error");
    sourceWriter.println("throw new UndeclaredThrowableException(%s);", exceptionVar);
    sourceWriter.outdent();
    sourceWriter.println("}");
}

From source file:com.google.web.bindery.autobean.gwt.rebind.AutoBeanFactoryGenerator.java

License:Apache License

private String getBaseMethodDeclaration(JMethod jmethod) {
    // Foo foo, Bar bar, Baz baz
    StringBuilder parameters = new StringBuilder();
    for (JParameter param : jmethod.getParameters()) {
        parameters.append(",").append(ModelUtils.getQualifiedBaseSourceName(param.getType())).append(" ")
                .append(param.getName());
    }//from  w  ww.j a v  a  2  s . com
    if (parameters.length() > 0) {
        parameters = parameters.deleteCharAt(0);
    }

    StringBuilder throwsDeclaration = new StringBuilder();
    if (jmethod.getThrows().length > 0) {
        for (JType thrown : jmethod.getThrows()) {
            throwsDeclaration.append(". ").append(ModelUtils.getQualifiedBaseSourceName(thrown));
        }
        throwsDeclaration.deleteCharAt(0);
        throwsDeclaration.insert(0, "throws ");
    }
    String returnName = ModelUtils.getQualifiedBaseSourceName(jmethod.getReturnType());
    assert !returnName.contains("extends");
    return String.format("%s %s(%s) %s", returnName, jmethod.getName(), parameters, throwsDeclaration);
}

From source file:com.seanchenxi.resteasy.autobean.generator.ThrowableFactoryGenerator.java

License:Apache License

private HashSet<String> getAllThrowableTypes(TypeOracle oracle, TreeLogger logger) {
    HashSet<String> set = new HashSet<String>();
    try {//from   ww w  .ja  v  a2s.  co m
        JType[] params = new JType[1];
        params[0] = oracle.parse("java.lang.String");
        JClassType[] svcTypes = oracle.getType(RESTService.class.getName()).getSubtypes();
        for (JClassType type : svcTypes) {
            for (JMethod method : type.getMethods()) {
                for (JClassType throwable : method.getThrows()) {
                    if (null != throwable.getConstructor(params))
                        set.add(throwable.getQualifiedSourceName());
                    else
                        logger.log(Type.WARN, throwable.getQualifiedSourceName()
                                + " will be ignored for serialization, it must at least have a constructor with string type message as parameter.");
                }
            }
        }
    } catch (Exception e) {
        logger.log(Type.ERROR, e.getMessage(), e);
    }
    set.addAll(THROWABLES);
    return set;
}

From source file:com.totsp.gwt.freezedry.rebind.SerializableTypeOracleBuilder.java

License:Apache License

private void validateRemoteService(TreeLogger logger, JClassType remoteService) {
    JMethod[] methods = remoteService.getOverridableMethods();

    logger = logger.branch(TreeLogger.DEBUG, "Analyzing methods:", null);

    for (int i = 0; i < methods.length; ++i) {
        JMethod method = methods[i];
        TreeLogger methodLogger = logger.branch(TreeLogger.DEBUG, method.toString(), null);
        JType returnType = method.getReturnType();
        TreeLogger returnTypeLogger = methodLogger.branch(TreeLogger.DEBUG,
                "Return type: " + returnType.getParameterizedQualifiedSourceName(), null);
        checkForUnparameterizedType(returnTypeLogger, returnType);
        checkType(returnTypeLogger, returnType, true);

        JParameter[] params = method.getParameters();
        for (int j = 0; j < params.length; ++j) {
            JParameter param = params[j];
            TreeLogger paramLogger = methodLogger.branch(TreeLogger.DEBUG, "Parameter: " + param.toString(),
                    null);/*from w  w  w.ja  va 2  s  . c  om*/
            JType paramType = param.getType();
            checkForUnparameterizedType(paramLogger, paramType);
            checkType(paramLogger, paramType, true);
        }

        JType[] exs = method.getThrows();
        if (exs.length > 0) {
            checkTypes(methodLogger.branch(TreeLogger.DEBUG, "Throws:", null), method.getThrows());
        }
    }
}

From source file:com.tyf.gwtphp.rebind.PHPRemoteServiceGenerator.java

License:Open Source License

/**
 * This method overrides the default RemoteService interface proxy generator, 
 * gathers type information and passes it to the linker, in addition to
 * invoking the default generator./*  www.  j a  va2s .  c  o m*/
 */
@Override
public RebindResult generateIncrementally(TreeLogger logger, GeneratorContext ctx, String requestedClass)
        throws UnableToCompleteException {

    TypeOracle typeOracle = ctx.getTypeOracle();
    String qualifiedClassName;
    String packageName, className;

    try {
        // get classType and save instance variables
        JClassType classType = typeOracle.getType(requestedClass);
        packageName = classType.getPackage().getName();
        className = classType.getSimpleSourceName();
        qualifiedClassName = packageName + "." + className;
        // prevent re-discovery
        if (generatedClasses.contains(qualifiedClassName))
            return super.generateIncrementally(logger, ctx, requestedClass);

        JClassType supertype = getSuperType(classType);
        ServiceArtifact artifact = new ServiceArtifact(classType.getQualifiedSourceName(),
                classType.getSimpleSourceName(), supertype != null ? supertype.getQualifiedSourceName() : null,
                supertype != null ? supertype.getSimpleSourceName() : null, classType.isInterface() != null,
                classType.isAbstract());

        // discover new custom objects, whose information must be known by
        // the server
        Set<ObjectArtifact> objectArtifacts = new HashSet<ObjectArtifact>();
        Set<JType> discoveredTypes = new HashSet<JType>();

        JMethod[] methods = classType.getMethods();
        // parse RPC methods
        for (JMethod method : methods) {
            JType returnType = method.getReturnType();
            JType[] paramTypes = method.getParameterTypes();
            String[] params = new String[paramTypes.length];
            String[] paramNames = new String[params.length];
            JClassType[] exceptionTypes = method.getThrows();
            String[] exceptions = new String[exceptionTypes.length];

            // getRpcTypeName recursively generates the type name, while
            // adding all discovered types to the set, flattening out 
            // arrays & generics, etc.
            String returnTypeName = TypeUtil.getPHPRpcTypeName(returnType, discoveredTypes);
            for (int i = 0; i < params.length; i++) {
                params[i] = TypeUtil.getPHPRpcTypeName(paramTypes[i], discoveredTypes);
                paramNames[i] = method.getParameters()[i].getName();
            }
            for (int i = 0; i < exceptions.length; i++) {
                exceptions[i] = TypeUtil.getPHPRpcTypeName(exceptionTypes[i], discoveredTypes);
            }

            // get type signature of the return type
            String returnTypeCRC = TypeUtil.getCRC(returnType);

            Function f = new Function(method.getName(), returnTypeName, returnTypeCRC, params, paramNames,
                    exceptions);

            artifact.putMethod(method.getName(), f);
        }
        for (JType type : discoveredTypes) {
            // logger.log(TreeLogger.INFO, type.getQualifiedSourceName());
            objectArtifacts.addAll(discoverObjects(type));
        }

        ctx.commitArtifact(logger, artifact);
        for (ObjectArtifact a : objectArtifacts) {
            ctx.commitArtifact(logger, a);
        }
    } catch (Exception e) {
        logger.log(TreeLogger.ERROR, "ERROR: " + e.getMessage(), e);
        return null;
    }

    return super.generateIncrementally(logger, ctx, requestedClass);
}

From source file:de.csenk.gwt.commons.bean.rebind.SourceGeneration.java

License:Apache License

/**
 * @param method//from w ww . ja  v  a2  s.c om
 * @return
 */
public static String getBaseMethodDeclaration(JMethod method) {
    final List<String> paramDeclarations = Lists.transform(Lists.newArrayList(method.getParameters()),
            new Function<JParameter, String>() {

                @Override
                @Nullable
                public String apply(@Nullable JParameter input) {
                    return String.format("%s %s", ModelUtils.getQualifiedBaseSourceName(input.getType()),
                            input.getName());
                }

            });

    final List<String> throwDeclarations = Lists.transform(Lists.newArrayList(method.getThrows()),
            new Function<JType, String>() {

                @Override
                @Nullable
                public String apply(@Nullable JType input) {
                    return ModelUtils.getQualifiedBaseSourceName(input);
                }

            });

    final String paramListDeclaration = Joiner.on(", ").join(paramDeclarations);
    final String throwsDeclaration = throwDeclarations.size() > 0
            ? String.format("throws %s", Joiner.on(", ").join(throwDeclarations))
            : "";
    final String returnName = ModelUtils.getQualifiedBaseSourceName(method.getReturnType());

    return String.format("%s %s(%s) %s", returnName, method.getName(), paramListDeclaration, throwsDeclaration);
}

From source file:fr.onevu.gwt.uibinder.rebind.JClassTypeAdapter.java

License:Apache License

/**
 * Creates a mock GWT method for the given java method.
 *
 * @param realMethod the java method/*from  w  w  w  .  j a v  a2  s  .  c  om*/
 * @param enclosingType the type to which the method belongs
 * @return the GWT method
 */
private JMethod adaptMethod(final Method realMethod, JClassType enclosingType) {
    // TODO(rdamazio): ensure a single instance per method per class
    final JMethod method = createMock(JMethod.class);

    addCommonAbstractMethodBehaviour(realMethod, method, enclosingType);
    addAnnotationBehaviour(realMethod, method);
    addGenericsBehaviour(realMethod, method);

    expect(method.isStatic()).andStubReturn(Modifier.isStatic(realMethod.getModifiers()));

    // Return type
    expect(method.getReturnType()).andStubAnswer(new IAnswer<JType>() {
        public JType answer() throws Throwable {
            return adaptType(realMethod.getReturnType());
        }
    });

    // Parameters
    expect(method.getParameters()).andStubAnswer(new IAnswer<JParameter[]>() {
        public JParameter[] answer() throws Throwable {
            return adaptParameters(realMethod.getParameterTypes(), realMethod.getParameterAnnotations(),
                    method);
        }
    });

    // Thrown exceptions
    expect(method.getThrows()).andStubAnswer(new IAnswer<JClassType[]>() {
        public JClassType[] answer() throws Throwable {
            Class<?>[] realThrows = realMethod.getExceptionTypes();
            JClassType[] gwtThrows = new JClassType[realThrows.length];
            for (int i = 0; i < realThrows.length; i++) {
                gwtThrows[i] = (JClassType) adaptType(realThrows[i]);
            }
            return gwtThrows;
        }
    });

    EasyMock.replay(method);
    return method;
}

From source file:fr.putnami.pwt.core.service.rebind.ServiceBinderCreator.java

License:Open Source License

private String createSerializer(TreeLogger logger, GeneratorContext context)
        throws UnableToCompleteException, NotFoundException {

    /* Hack because SerializableTypeOracleBuilder constructor has only two arguments since GWT 2.7 */

    SerializableTypeOracleBuilder typesSentFromBrowser = null;
    SerializableTypeOracleBuilder typesSentToBrowser = null;
    try {/*from   w  w w . ja va  2  s . c  o  m*/
        try {
            Constructor<SerializableTypeOracleBuilder> constructor = SerializableTypeOracleBuilder.class
                    .getConstructor(TreeLogger.class, PropertyOracle.class, GeneratorContext.class);
            typesSentFromBrowser = constructor.newInstance(logger, context.getPropertyOracle(), context);
            typesSentToBrowser = constructor.newInstance(logger, context.getPropertyOracle(), context);
        } catch (NoSuchMethodException exc) {
            try {
                Constructor<SerializableTypeOracleBuilder> constructor = SerializableTypeOracleBuilder.class
                        .getConstructor(TreeLogger.class, GeneratorContext.class);
                typesSentFromBrowser = constructor.newInstance(logger, context);
                typesSentToBrowser = constructor.newInstance(logger, context);
            } catch (NoSuchMethodException ex) {
                logger.branch(TreeLogger.ERROR, "Unable to find a SerializableTypeOracleBuilder constructor",
                        null);
                throw new UnableToCompleteException();
            }
        }
    } catch (InstantiationException e) {
        logger.branch(TreeLogger.ERROR, "Unable to invoke SerializableTypeOracleBuilder constructor", null);
        throw new UnableToCompleteException();
    } catch (IllegalAccessException e) {
        logger.branch(TreeLogger.ERROR, "Unable to invoke SerializableTypeOracleBuilder constructor", null);
        throw new UnableToCompleteException();
    } catch (IllegalArgumentException e) {
        logger.branch(TreeLogger.ERROR, "Unable to invoke SerializableTypeOracleBuilder constructor", null);
        throw new UnableToCompleteException();
    } catch (InvocationTargetException e) {
        logger.branch(TreeLogger.ERROR, "Unable to invoke SerializableTypeOracleBuilder constructor", null);
        throw new UnableToCompleteException();
    }
    /* End of Hack */
    JMethod[] methods = this.serviceType.getOverridableMethods();
    TypeOracle typeOracle = context.getTypeOracle();

    JClassType rteType = typeOracle.getType(RpcTokenException.class.getName());
    JClassType rpcTokenClass = typeOracle.getType(RpcToken.class.getName());
    RpcTokenImplementation tokenClassToUse = this.serviceType
            .findAnnotationInTypeHierarchy(RpcTokenImplementation.class);
    if (tokenClassToUse != null) {
        JClassType rpcTokenType = typeOracle.getType(tokenClassToUse.value());
        if (rpcTokenType.isAssignableTo(rpcTokenClass)) {
            typesSentFromBrowser.addRootType(logger, rpcTokenType);
            typesSentToBrowser.addRootType(logger, rteType);
        } else {
            logger.branch(TreeLogger.ERROR, "RPC token class " + tokenClassToUse.value() + " must implement "
                    + RpcToken.class.getName(), null);
            throw new UnableToCompleteException();
        }
    } else {
        JClassType[] rpcTokenSubclasses = rpcTokenClass.getSubtypes();
        for (JClassType rpcTokenSubclass : rpcTokenSubclasses) {
            typesSentFromBrowser.addRootType(logger, rpcTokenSubclass);
        }
        if (rpcTokenSubclasses.length > 0) {
            typesSentToBrowser.addRootType(logger, rteType);
        }
    }
    typesSentFromBrowser.addRootType(logger, typeOracle.getType(CommandDefinition.class.getName()));
    typesSentFromBrowser.addRootType(logger, typeOracle.getType(CommandRequest.class.getName()));
    typesSentToBrowser.addRootType(logger, typeOracle.getType(CommandResponse.class.getName()));

    for (JMethod method : methods) {
        JType returnType = method.getReturnType();
        if (returnType != JPrimitiveType.VOID) {
            typesSentToBrowser.addRootType(logger, returnType);
        }

        JParameter[] params = method.getParameters();
        for (JParameter param : params) {
            JType paramType = param.getType();
            typesSentFromBrowser.addRootType(logger, paramType);
        }

        JType[] exs = method.getThrows();
        if (exs.length > 0) {
            for (JType ex : exs) {
                typesSentToBrowser.addRootType(logger, ex);
            }
        }
    }

    String serializerSimpleName = this.serviceType.getSimpleSourceName() + "_TypeSerializer";
    String serializeQualifiedName = this.serviceType.getQualifiedSourceName() + "_TypeSerializer";

    TypeSerializerCreator tsc = new TypeSerializerCreator(logger, typesSentFromBrowser.build(logger),
            typesSentToBrowser.build(logger), context, serializeQualifiedName, serializerSimpleName);

    return tsc.realize(logger);
}

From source file:net.officefloor.plugin.gwt.comet.generate.CometAdapterGenerator.java

License:Open Source License

@Override
public String generate(TreeLogger logger, GeneratorContext context, String typeName)
        throws UnableToCompleteException {

    final String COMET_LISTENER_CLASS_NAME = CometSubscriber.class.getName();

    // Determine if the CometListener
    if (COMET_LISTENER_CLASS_NAME.equals(typeName)) {
        logger.log(Type.DEBUG, "Not generating for " + typeName);
        return typeName; // use CometListener as is
    }// ww  w.ja  v a  2  s. c om

    // Obtain the type
    TypeOracle oracle = context.getTypeOracle();
    JClassType type = oracle.findType(typeName);
    if (type == null) {
        logger.log(Type.ERROR, "Can not find " + JClassType.class.getSimpleName() + " for " + typeName);
        throw new UnableToCompleteException();
    }

    // Ensure type has correct signature
    JMethod[] methods = type.getMethods();
    if (methods.length != 1) {
        logger.log(Type.ERROR,
                "Interface " + type.getQualifiedSourceName()
                        + " must only have one method declared as the interface is marked with "
                        + CometSubscriber.class.getSimpleName());
        throw new UnableToCompleteException();
    }
    JMethod method = methods[0];

    // Ensure method has only one parameter
    JParameter[] parameters = method.getParameters();
    JParameter eventParameter = null;
    JParameter matchKeyParameter = null;
    switch (parameters.length) {
    case 2:
        matchKeyParameter = parameters[1];
    case 1:
        eventParameter = parameters[0];
    case 0:
        break;
    default:
        // Too many parameters
        logger.log(Type.ERROR, "Interface method " + type.getQualifiedSourceName() + "." + method.getName()
                + " must have no more than two parameters (event and match key) as the interface is marked with "
                + CometSubscriber.class.getSimpleName());
        throw new UnableToCompleteException();
    }

    // Ensure no throws on the method
    if (method.getThrows().length != 0) {
        logger.log(Type.ERROR,
                "Interface method " + type.getQualifiedSourceName() + "." + method.getName()
                        + " must not throw exceptions as the interface is marked with "
                        + CometSubscriber.class.getSimpleName());
        throw new UnableToCompleteException();
    }

    // Obtain details to generate adapter class
    String packageName = type.getPackage().getName();
    String simpleName = type.getSimpleSourceName() + "Adapter";
    String qualifiedName = packageName + "." + simpleName;
    String methodName = method.getName();
    logger.log(Type.TRACE, "Generating " + CometSubscriber.class.getSimpleName() + " Adapter for " + typeName
            + " [resulting class " + qualifiedName + "]");

    // Generate the adapter
    ClassSourceFileComposerFactory adapter = new ClassSourceFileComposerFactory(packageName, simpleName);
    adapter.addImplementedInterface(CometAdapter.class.getName());
    adapter.addImport(CometAdapter.class.getName());
    adapter.addImport(OfficeFloorComet.class.getName());
    PrintWriter src = context.tryCreate(logger, packageName, simpleName);
    if (src == null) {
        logger.log(Type.TRACE, qualifiedName + " for adapting " + CometSubscriber.class.getSimpleName()
                + " already generated.");
        return qualifiedName; // should already exist
    }
    SourceWriter writer = adapter.createSourceWriter(context, src);

    // Provide handleEvent method
    writer.println("@Override");
    writer.println("public void handleEvent(Object handler, Object event, Object matchKey) {");
    writer.print("    ((" + typeName + ") handler)." + methodName + "(");
    if (eventParameter != null) {
        writer.print("(" + eventParameter.getType().getQualifiedSourceName() + ") event");
    }
    if (matchKeyParameter != null) {
        writer.print(", (" + matchKeyParameter.getType().getQualifiedSourceName() + ") matchKey");
    }
    writer.println(");");
    writer.println("}");
    writer.println();

    // Provide createPublisher method
    writer.println("@Override");
    writer.println("public Object createPublisher() {");
    writer.println("    return new " + typeName + "() {");
    writer.println("        @Override");
    writer.print("        public void " + methodName + "(");
    if (eventParameter != null) {
        writer.print(eventParameter.getType().getQualifiedSourceName() + " event");
    }
    if (matchKeyParameter != null) {
        writer.print(", " + matchKeyParameter.getType().getQualifiedSourceName() + " matchKey");
    }
    writer.print(") {");
    writer.println("            OfficeFloorComet.publish(" + typeName + ".class, "
            + (eventParameter == null ? "null" : "event") + ", "
            + (matchKeyParameter == null ? "null" : "matchKey") + ");");
    writer.println("        }");
    writer.println("    };");
    writer.println("}");

    writer.commit(logger);

    // Return adapter
    return qualifiedName;
}