List of usage examples for com.google.gwt.core.ext.typeinfo JMethod getThrows
JClassType[] getThrows();
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; }