List of usage examples for com.google.gwt.core.ext.typeinfo JMethod getReadableDeclaration
String getReadableDeclaration(boolean noAccess, boolean noNative, boolean noStatic, boolean noFinal, boolean noAbstract);
From source file:com.colinalworth.gwt.websockets.rebind.ServerCreator.java
License:Apache License
/** * Writes out the method to use to invoke a server call. Mostly derived from RPC's way of building proxy methods * * @param logger/*w ww.ja v a2 s . com*/ * @param context * @param sw * @param m */ private void printServerMethodBody(TreeLogger logger, GeneratorContext context, SourceWriter sw, JMethod m) { sw.println("%1$s {", m.getReadableDeclaration(false, true, true, true, true)); sw.indent(); sw.print("__sendMessage(\"%1$s\"", m.getName()); StringBuilder sb = new StringBuilder(); String callback = "null"; JParameter[] parameters = m.getParameters(); for (int i = 0; i < parameters.length; i++) { JParameter param = parameters[i]; if (i + 1 == parameters.length && param.getType().isInterface() != null && param.getType().isInterface().getQualifiedSourceName().equals(Callback.class.getName())) { callback = param.getName(); } else { sb.append(",\n").append(param.getName()); } } sw.print(","); sw.println(callback); sw.print(sb.toString()); sw.println(");"); sw.outdent(); sw.println("}"); }
From source file:com.eleven.rebind.SkinBundleGenerator.java
License:Apache License
private void generateImageMethod(final SkinBundleBuilder compositeImage, final SourceWriter sw, final JMethod method, final String imgResName) { String decl = method.getReadableDeclaration(false, true, true, true, true); {//from ww w .ja v a 2 s. co m sw.indent(); // Create a singleton that this method can return. There is no need // to // create a new instance every time this method is called, since // ClippedImagePrototype is immutable SkinBundleBuilder.ImageRect imageRect = compositeImage.getMapping(imgResName); String singletonName = method.getName() + "_SINGLETON"; sw.print("private static final ClippedImagePrototype "); sw.print(singletonName); sw.print(" = new ClippedImagePrototype(IMAGE_BUNDLE_URL, "); sw.print(Integer.toString(imageRect.getLeft())); sw.print(", "); sw.print(Integer.toString(imageRect.getTop())); sw.print(", "); sw.print(Integer.toString(imageRect.getWidth())); sw.print(", "); sw.print(Integer.toString(imageRect.getHeight())); sw.println(");"); sw.print(decl); sw.println(" {"); sw.indent(); sw.print("return "); sw.print(singletonName); sw.println(";"); sw.outdent(); sw.println("}"); sw.outdent(); } }
From source file:com.google.gwt.testing.easygwtmock.rebind.MocksControlGenerator.java
License:Apache License
private void printFactoryMethod(SourceWriter out, JMethod methodToImplement, JClassType mockControlInterface, String classToCreate) {//from w ww.j a v a2 s . c o m out.println("%s {", methodToImplement.getReadableDeclaration(false, false, false, false, true)); out.indent(); if (isNiceMock(methodToImplement, mockControlInterface)) { out.print("return this.setToNice(new %s(", classToCreate); printMatchingParameters(out, methodToImplement); out.println(").__mockInit(this));"); } else { out.print("return new %s(", classToCreate); printMatchingParameters(out, methodToImplement); out.println(").__mockInit(this);"); } out.outdent(); out.println("}"); }
From source file:com.google.gwt.testing.easygwtmock.rebind.MocksGenerator.java
License:Apache License
/** * Generates and prints the actual mock versions of the methods. *//* w w w .j a va 2 s.c om*/ private void printMockMethods(SourceWriter sourceWriter, List<JMethod> methodsToMock, String newClassName) { int methodNo = 0; for (JMethod method : methodsToMock) { sourceWriter.println("%s {", method.getReadableDeclaration(false, true, false, false, true)); sourceWriter.indent(); printMockMethodBody(sourceWriter, method, methodNo++, newClassName); sourceWriter.outdent(); sourceWriter.println("}"); sourceWriter.println(); } }
From source file:com.google.speedtracer.generators.BuildInfoGenerator.java
License:Apache License
private String emitImplClass(TreeLogger logger, GeneratorContext context, JClassType typeClass, JMethod revisionMethod, JMethod timeMethod) { final int revision = getBuildRevision(); final String subclassName = typeClass.getSimpleSourceName() + "_r" + revision; final String packageName = typeClass.getPackage().getName(); final ClassSourceFileComposerFactory f = new ClassSourceFileComposerFactory(packageName, subclassName); f.addImplementedInterface(typeClass.getQualifiedSourceName()); final PrintWriter pw = context.tryCreate(logger, packageName, subclassName); if (pw != null) { final SourceWriter sw = f.createSourceWriter(context, pw); sw.print(revisionMethod.getReadableDeclaration(false, true, true, true, true)); sw.println("{ return " + revision + "; }"); sw.print(timeMethod.getReadableDeclaration(false, true, true, true, true)); sw.println("{ return new java.util.Date(" + System.currentTimeMillis() + "L); }"); sw.commit(logger);//from ww w . j a va2s.c o m } return f.getCreatedClassName(); }
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; }//from ww w .j a v a 2s . c o 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:com.guit.rebind.binder.GuitBinderGenerator.java
License:Apache License
private void printViewFieldBindings(SourceWriter writer, JClassType presenterType, String viewTypeName, HashMap<String, JType> validBindingFieldsType, ArrayList<JField> fields) throws UnableToCompleteException { Set<String> validBindingFields = validBindingFieldsType.keySet(); JClassType viewAccesorType = getType(ViewAccesor.class.getCanonicalName()); ArrayList<JField> superFields = new ArrayList<JField>(); collectAllFields(presenterType.getSuperclass(), superFields); JClassType elementDomType = getType(com.guit.client.dom.Element.class.getCanonicalName()); for (JField f : fields) { if (f.isAnnotationPresent(ViewField.class)) { // Check for repetided fields if (f.getType().isClassOrInterface().isAssignableTo(elementDomType)) { if (superFields.contains(f)) { }// w ww . j a va 2 s .c o m } String name = f.getName(); ViewField viewField = f.getAnnotation(ViewField.class); String viewName = viewField.name(); if (viewName.isEmpty()) { viewName = name; } if (!validBindingFields.contains(viewName)) { error("The field '%s' do not exists. Found: %s.%s", viewName, presenterType.getQualifiedSourceName(), name); } JClassType type = f.getType().isClassOrInterface(); // if (type.isInterface() == null && !viewField.provided()) { // error("A ViewField must be an interface. Found: %s.%s", presenterType // .getQualifiedSourceName(), name); // } if (type.isAssignableTo(viewAccesorType)) { writer.println("{"); writer.indent(); if (!type.isAnnotationPresent(Implementation.class)) { writer.println(type.getQualifiedSourceName() + " accesor = " + GinOracle.getProvidedInstance(type.getQualifiedSourceName()) + ".get();"); } else { JClassType implementation = getType( type.getAnnotation(Implementation.class).value().getCanonicalName()); // If they are parameterized look for the base type JParameterizedType implementationParameterized = implementation.isParameterized(); if (implementationParameterized != null) { implementation = implementationParameterized.getBaseType(); } JParameterizedType typeParameterized = type.isParameterized(); if (typeParameterized != null) { type = typeParameterized.getBaseType(); } // Verify that they are assignable if (!implementation.isAssignableTo(type)) { error("An implementation of a ViewAccesor must implement the ViewAccesor interface. Found: %s", implementation.getQualifiedSourceName()); } writer.println(type.getQualifiedSourceName() + " accesor = new " + implementation.getQualifiedSourceName() + "();"); } writer.println("accesor.setTarget(view." + viewName + ");"); writer.println("presenter." + name + " = accesor;"); writer.outdent(); writer.print("}"); writer.println(); } else if (type == null || type.isAssignableFrom(validBindingFieldsType.get(viewName).isClassOrInterface()) || type.getQualifiedSourceName().startsWith("elemental.")) { String qualifiedSourceName = f.getType().getQualifiedSourceName(); writer.println("presenter." + name + " = (" + qualifiedSourceName + ") view." + viewName + ";"); writer.println(); } else { // Interface emulation (without exceptions) writer.println( "presenter." + name + " = new " + type.getParameterizedQualifiedSourceName() + "() {"); writer.indent(); ArrayList<JMethod> methods = new ArrayList<JMethod>(); findAllMethods(type, methods); for (JMethod m : methods) { writer.print(m.getReadableDeclaration(false, true, true, true, true)); writer.println("{"); writer.indent(); // Find the parameters StringBuilder callParameters = new StringBuilder(); for (JParameter p : m.getParameters()) { if (callParameters.length() > 0) { callParameters.append(", "); } if (p.isAnnotationPresent(ImplicitCast.class)) { callParameters.append("("); callParameters .append(p.getAnnotation(ImplicitCast.class).value().getCanonicalName()); callParameters.append(") "); } callParameters.append(p.getName()); } JType returnType = m.getReturnType(); if (!returnType.equals(JPrimitiveType.VOID)) { writer.print("return "); // Implicit cast writer.print("(" + returnType.getParameterizedQualifiedSourceName() + ")"); } writer.indent(); writer.println(createdClassName + ".this.view." + viewName + "." + m.getName() + "(" + callParameters.toString() + ");"); writer.outdent(); writer.outdent(); writer.println("}"); writer.println(); } // Get .equals working on emulated interfaces for // event.getSource() comparations writer.println("@Override"); writer.println("public boolean equals(Object obj) {"); writer.indent(); writer.println("return view." + viewName + ".equals(obj);"); writer.outdent(); writer.println("}"); writer.println(); writer.outdent(); writer.println("};"); } } } }
From source file:com.sencha.gxt.core.rebind.BindingPropertyGenerator.java
License:sencha.com license
@Override public String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException { TypeOracle oracle = context.getTypeOracle(); JClassType toGenerate = oracle.findType(typeName).isInterface(); if (toGenerate == null) { logger.log(Type.ERROR, typeName + " is not an interface"); throw new UnableToCompleteException(); }// www .j a va 2s. com PropertyName annotation = toGenerate.getAnnotation(PropertyName.class); if (annotation == null) { logger.log(Type.ERROR, "Cannot generate with a @PropertyName anntation on the type"); throw new UnableToCompleteException(); } String propertyName = annotation.value(); SelectionProperty property; String value; try { property = context.getPropertyOracle().getSelectionProperty(logger, propertyName); value = property.getCurrentValue(); } catch (BadPropertyValueException e) { logger.log(Type.ERROR, "Error occured loading property: ", e); throw new UnableToCompleteException(); } String packageName = toGenerate.getPackage().getName(); String simpleSourceName = toGenerate.getName().replace('.', '_') + "_" + value; PrintWriter pw = context.tryCreate(logger, packageName, simpleSourceName); if (pw == null) { return packageName + "." + simpleSourceName; } ClassSourceFileComposerFactory factory = new ClassSourceFileComposerFactory(packageName, simpleSourceName); factory.addImplementedInterface(typeName); SourceWriter sw = factory.createSourceWriter(context, pw); for (JMethod method : toGenerate.getMethods()) { if (method.getReturnType().isPrimitive() != JPrimitiveType.BOOLEAN && !method.getReturnType().isClass() .getQualifiedSourceName().equals(Name.getSourceNameForClass(Boolean.class))) { logger.log(Type.ERROR, "Methods must return boolean or Boolean"); throw new UnableToCompleteException(); } sw.println("%1$s {", method.getReadableDeclaration(false, true, true, true, true)); PropertyValue val = method.getAnnotation(PropertyValue.class); if (val == null) { logger.log(Type.ERROR, "Method must have a @PropertyValue annotation"); throw new UnableToCompleteException(); } if (!property.getPossibleValues().contains(val.value()) && val.warn()) { logger.log(Type.WARN, "Value '" + val + "' is not present in the current set of possible values for selection property " + propertyName); } sw.indentln("return %1$b;", val.value().equals(value)); sw.println("}"); } sw.commit(logger); return factory.getCreatedClassName(); }
From source file:fr.onevu.gwt.uibinder.rebind.UiBinderWriter.java
License:Apache License
private static String formatMethodError(JMethod eventMethod) { return "\"" + eventMethod.getReadableDeclaration(true, true, true, true, true) + "\"" + " of " + eventMethod.getEnclosingType().getQualifiedSourceName(); }
From source file:fr.onevu.gwt.uibinder.rebind.UiBinderWriter.java
License:Apache License
private void writeRendererEventMethods(IndentedWriter w, JMethod[] eventMethods, String rootField) throws UnableToCompleteException { for (JMethod jMethod : eventMethods) { JClassType eventTargetType = jMethod.getParameterTypes()[0].isClassOrInterface(); String eventTargetSimpleName = eventTargetType.getSimpleSourceName(); String dispatcherClassName = UI_RENDERER_DISPATCHER_PREFIX + eventTargetSimpleName; JMethod[] uiHandlerMethods = findUiHandlerMethods(eventTargetType); // public void onBrowserEvent(Foo f, NativeEvent event, Element parent, A // a, B b ...) { w.write("@Override"); w.write("public %s {", jMethod.getReadableDeclaration(true, true, true, true, true)); if (uiHandlerMethods.length != 0) { w.indent();/*from w w w . ja v a 2s.c o m*/ // if (singletonUiRendererDispatcherForFoo == null) { w.write("if (singleton%s == null) {", dispatcherClassName); w.indent(); // singletonUiRendererDispatcherForFoo = new // UiRendererDispatcherForFoo(); w.write("singleton%s = new %s();", dispatcherClassName, dispatcherClassName); w.outdent(); w.write("}"); // singletonUiRendererDispatcherForFoo.fire(o, event, parent, a, b); StringBuffer sb = new StringBuffer(); JParameter[] parameters = jMethod.getParameters(); for (int i = 0; i < parameters.length; i++) { JParameter callParam = parameters[i]; if (i != 0) { sb.append(", "); } sb.append(callParam.getName()); } w.write("singleton%s.fire(%s);", dispatcherClassName, sb.toString()); w.outdent(); } w.write("}"); w.newline(); if (uiHandlerMethods.length != 0) { // private static UiRendererDispatcherForFoo // singletonUiRendererDispatcherForFoo; w.write("private static %s singleton%s;", dispatcherClassName, dispatcherClassName); writeRendererDispatcher(w, dispatcherClassName, eventTargetType, rootField, uiHandlerMethods, jMethod); } } }